it-swarm-ru.tech

Добавление нескольких столбцов в одну миграцию

Сценарий: у нас уже есть документ модель, и мы хотим добавить 

  • общедоступный
  • частный

или более столбцов с использованием одной миграции.

Из того, что я искал и читал до сих пор, вам просто нужно отредактировать файл миграции. Если миграция уже была применена, выполните откат и повторите миграцию.

  1. Это обычная лучшая практика или есть лучший способ?
  2. Если это способ сделать это, каким будет правильное наименование для этой миграции?
16
Marius Butuc

Откат миграции и повторное редактирование безопасны только в том случае, если эта миграция является локальной и не была перенесена в какой-либо репозиторий. Редактирование миграции, примененной другими, может вызвать проблемы.

Самый безопасный способ добавить столбцы в существующую таблицу - просто создать новую миграцию:

Rails g migration add_public_and_private_to_document public:string private:string

Если вы используете соглашение об именах add_[column_names]_to_[model], Rails разработает соответствующую таблицу и создаст нужную вам миграцию.

Читайте здесь для получения дополнительной информации: http://guides.rubyonrails.org/migrations.html

61
Cam

@Cam way is rigth..Except вам нужно будет обновить две вещи после запуска миграции. 

Итак, допустим, у меня есть существующий каркас с именем 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 : 

В новых версиях Rails есть так называемый сильный параметр, который не позволяет хакерам передавать произвольные значения поля столбца. Короче говоря, обновите метод новыми именами полей, иначе вы не увидите новые поля. 

 # 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
2
zee

Вы можете выполнить команду следующим образом: 

Rails g миграционный документ public: string private: string  

0
Prabhakar