2015-04-24 2 views
2

Say У меня есть существующие миграции в Rails:Rails: заполнить существующую таблицу с помощью миграции

class CreateStudies < ActiveRecord::Migration 
    def change 
    create_table :studies do |t| 
     t.string :display_name, null: false 
     t.string :tag_name, null: false 

     t.timestamps 
    end 

    add_index :studies, :tag_name, unique: true 
    end 
end 

Позже я понял, что я хотел бы, чтобы заполнить эту таблицу с количеством строк, и я не хотите использовать rake db:rollback или файл seeds.rb. Каков формат нового файла миграции?

ответ

2

Просто:

В командной строке генерации:

rails generate migration AddInitialStudies 

И изменить up и down метод сгенерированного миграции:

class AddInitialStudies < ActiveRecord::Migration 
    def up 
    Study.create(display_name: "Example name", tag_name: "example_name") 
    end 

    def down 
    Study.delete_all 
    end 
end 

В этот момент я генерировать один объект исследования, но вы можете добавить столько, сколько хотите.

down, удалите записи, добавленные на up, потому что откат и миграция снова будут дублировать добавленные записи. Я предполагаю, что единственными учебными записями являются созданные на up. Будьте осторожны с :tag_name, который должен быть уникальным.

0

Я полагаю, что лучше использовать грабли задачи генерировать новые объекты, а не с помощью миграции. Вот пример кода https://github.com/maxmilan/Adverts_desk/blob/master/lib/tasks/advert_generators.rake#L3. Вы также можете отправить количество сгенерированных объектов в качестве аргумента задачи.

Смежные вопросы