Добавление нескольких столбцов в одну миграцию - PullRequest
16 голосов
/ 15 февраля 2011

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

  • public
  • private

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

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

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

Ответы [ 3 ]

61 голосов
/ 15 февраля 2011

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

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

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

2 голосов
/ 21 октября 2015

@ Cam - это просто. За исключением того, что вам нужно будет обновить две вещи после запуска миграции.

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...