我试图在我的迁移中创建一条记录但是我遇到了麻烦我之前已经完成了(在我的高级开发人员的帮助下)并且我试图复制他所做的但是它似乎没有创建记录数据库......
继承迁移文件
class PageEditor < ActiveRecord::Base; end
def create_initial_record
PageEditor.create({
:title => 'Events & Training',
:content => ''
})
PageEditor.create({
:title => 'Roof Mount - Training',
:content => ''
})
end
class CreatePageEditors < ActiveRecord::Migration
def up
create_table :page_editors do |t|
t.string :title
t.text :content
t.timestamps
end
create_initial_record
end
def down
drop_table :page_editors
end
end
所以我添加了屋顶支架 - 培训部分,然后运行了rake db:migrate但是它没有创建记录并且没有显示在我的索引页面上.......
答案 0 :(得分:7)
请参阅http://edgeguides.rubyonrails.org/migrations.html#migrations-and-seed-data
更好的方法是使用Rails'种子'功能:在db/seeds.rb
文件中:
PageEditor.create({:title => 'Events & Training', :content => ''})
PageEditor.create({:title => 'Roof Mount - Training', :content => ''})
然后运行rake db:seed
答案 1 :(得分:4)
简单的解决方案就是编写另一个迁移,例如add_values_to_page_editors
并在那
class AddValuesToPageEditors < ActiveRecord::Migration
def up
page_editor1 = PageEditor.create!({:title => 'Events & Training', :content => ''})
page_editor2 = PageEditor.create!({:title => 'Roof Mount - Training', :content => ''})
end
def down
page_editor1 = PageEditor.find_by_title( 'Events & Training' )
page_editor1.destroy
page_editor2 = PageEditor.find_by_title( 'Roof Mount - Training' )
page_editor2.destroy
end
end
答案 2 :(得分:3)
创建表格后尝试PageEditor.reset_column_information
。否则,ActiveRecord将根据旧数据执行操作。
您还应该考虑在迁移中嵌入PageEditor
的骨架版本。这可以防止验证问题导致您的create
调用瘫痪,或者模型的更高版本会干扰未预料到的旧版迁移。例如:
class ManufactureWidgets < ActiveRecord::Migration
class Widget < ActiveRecord::Base; end
def change
create_table :widgets do |t|
t.timestamps
end
Widget.reset_column_information
Widget.create!
end
end
重要的是要记住,迁移不始终运行以构建数据库。它们应该用于从一个模式迁移到另一个模式,并且在更稳定的环境中部署时,通常会运行rake db:schema:load
,它会完全绕过迁移并简单地基于schema.rb
中的信息。
遗憾的是,种子数据在Rails中的实现很差,但是有很多第三方库在处理这个问题时有不同的理念。如果您是已经在迁移中嵌入种子数据的项目的初级开发人员,您应该将其标记给高级开发人员并提出更改;如果这是不恰当或不可行的,那么简单地遵循既定模式是恰当的。
答案 3 :(得分:2)
在您的迁移中而不是
create_initial_record
使用
PageEditor.create_initial_record!
希望这会奏效。这是你想要的解决方案: - )