Добавление нескольких столбцов в одну миграцию
Сценарий: у нас уже есть модель документа, и мы хотим добавить
или больше столбцов с использованием одной миграции.
Из того, что я искал и читал до сих пор, вам просто нужно отредактировать файл миграции. Если миграция уже была применена, откат и повторная миграция.
- Это обычная передовая практика, или есть лучший способ?
- Если это способ сделать это, каково было бы правильное имя для этой миграции?
Ответы
Ответ 1
Откат миграции и повторная редактирование безопасны только в том случае, если эта миграция является локальной и не была вытолкнута в какой-либо репозиторий. Редактирование переноса, которое другие применили, может вызвать проблемы.
Самый безопасный способ добавления столбцов в существующую таблицу - это просто создать новую миграцию:
rails g migration add_public_and_private_to_document public:string private:string
Если вы используете соглашение об именах add_[column_names]_to_[model]
, рельсы выработают соответствующую таблицу и создадут требуемую миграцию.
Читайте здесь для получения дополнительной информации: http://guides.rubyonrails.org/migrations.html
Ответ 2
@Путь к компьютеру - это просто. Если после миграции вам нужно будет обновить две вещи.
Итак, скажем, у меня есть существующий эшафот под названием myapp
, и я хочу добавить еще больше полей на этот эшафот. Три дела.
Добавляемое поле:
= >
1) rails g migration add_term_count_and_current_record_count_and_previous_record_count_to_myapp term_count:integer , current_record_count:integer , previous_record_count:integer
= >
2) Update views, example updating _form.html.rb
Мне нужно было добавить:
<div class="field">
<%= f.label :current_record_count %><br>
<%= f.number_field :current_record_count%>
</div>
<div class="field">
<%= f.label :current_record_count %><br>
<%= f.number_field :previouse_record_count%>
</div>
<div class="field">
<%= f.label :term_count %><br>
<%= f.number_field :terminations_count %>
</div>
= >
3) Update Controller :
Новые версии рельсов имеют так называемый сильный параметр, чтобы хакеры не могли передавать произвольные значения полей столбца. Короче говоря, обновите метод с новыми именами полей, иначе вы не увидите новые поля.
# Never trust parameters from the scary internet, only allow the white list through.
def vendor_file_params
params.require(:vendor_file).permit(:name, :run_date, :term_count ,
:current_record_count , :previous_record_count ,:comments)
end
end
Ответ 3
Вы можете выполнить команду следующим образом:
рельсы g документ миграции public: строка private: строка