После составления таблицы (миграцией), я хочу вставить некоторые записи непосредственно. Как я должен записать миграцию для этого?
спасибо
Обновление: Это правильный ответ: https://stackoverflow.com/a / 2667747/7852
Вот пример из ruby на rails api :
class AddSystemSettings < ActiveRecord::Migration
# create the table
def self.up
create_table :system_settings do |t|
t.string :name
t.string :label
t.text :value
t.string :type
t.integer :position
end
# populate the table
SystemSetting.create :name => "notice", :label => "Use notice?", :value => 1
end
def self.down
drop_table :system_settings
end
end
Не . Если вы ищете начальные данные, вам следует использовать вместо них db / seed.rb
и rake db: seed
. Подробнее в этом Railscast .
Примечание: всегда проверяйте, что код в db / seed.rb
идемпотентен. т.е. повторный запуск семян всегда должен быть безопасным.
Но если вы должны вставить или изменить данные внутри миграции (для этого есть законные варианты использования), лучше вместо этого использовать операторы SQL. Не гарантируется, что ваш класс модели останется в той же форме в будущей версии вашего приложения, и запуск миграции с нуля в будущем может привести к ошибкам, если вы напрямую ссылаетесь на класс модели.
execute "insert into system_settings (name, label, value) values ('notice', 'Use notice?', 1)"
создайте новый файл миграции, например 047_add_rows_in_system_settings.rb
class AddRowsInAddSystemSettings < ActiveRecord::Migration
def self.up
SystemSetting.create{:name => "name1", :label => "Use notice?", :value => 1}
SystemSetting.create{:name => "name2", :label => "Use notice?", :value => 2}
end
def self.down
SystemSetting.delete_all
end
end
ИЛИ
, при создании таблицы
046_system_settings.rb
class AddSystemSettings < ActiveRecord::Migration
def self.up
create_table :system_settings do |t|
t.string :name
t.string :label
t.text :value
t.string :type
t.integer :position
end
SystemSetting.create :name => "notice", :label => "Use notice?", :value => 1
end
def self.down
drop_table :system_settings
end
end
Ссылка: - http: //api.rubyonrails. org / classes / ActiveRecord / Migration.html