我有一个rake任务,在我的rails应用程序中填充一些初始数据.例如,国家,州,移动运营商等
我现在设置它的方式是,我在/ db/fixtures中的文件中有一堆create语句,还有一个处理它们的rake任务.例如,我有一个模型是主题.我在/ db/fixtures中有一个theme.rb文件,如下所示:
Theme.delete_all
Theme.create(:id => 1, :name=>'Lite', :background_color=>'0xC7FFD5', :title_text_color=>'0x222222',
:component_theme_color=>'0x001277', :carrier_select_color=>'0x7683FF', :label_text_color=>'0x000000',
:join_upper_gradient=>'0x6FAEFF', :join_lower_gradient=>'0x000000', :join_text_color=>'0xFFFFFF',
:cancel_link_color=>'0x001277', :border_color=>'0x888888', :carrier_text_color=>'0x000000', :public => true)
Theme.create(:id => 2, :name=>'Metallic', :background_color=>'0x000000', :title_text_color=>'0x7299FF',
:component_theme_color=>'0xDBF2FF', :carrier_select_color=>'0x000000', :label_text_color=>'0xDBF2FF',
:join_upper_gradient=>'0x2B25FF', :join_lower_gradient=>'0xBEFFAC', :join_text_color=>'0x000000',
:cancel_link_color=>'0xFF7C12', :border_color=>'0x000000', :carrier_text_color=>'0x000000', :public => true)
Theme.create(:id => 3, :name=>'Blues', :background_color=>'0x0060EC', :title_text_color=>'0x000374',
:component_theme_color=>'0x000374', :carrier_select_color=>'0x4357FF', :label_text_color=>'0x000000',
:join_upper_gradient=>'0x4357FF', :join_lower_gradient=>'0xffffff', :join_text_color=>'0x000000',
:cancel_link_color=>'0xffffff', :border_color=>'0x666666', :carrier_text_color=>'0x000000', :public => true)
puts "Success: Theme data loaded"
Run Code Online (Sandbox Code Playgroud)
这里的想法是我想为用户安装一些股票主题.我有这个方法的问题.
设置ID不起作用.这意味着如果我决定添加一个主题,让我们称之为"红色",那么我只想将主题语句添加到此fixture文件并调用rake任务来重新设置数据库.如果我这样做,因为主题属于其他对象,并且在重新初始化时它们的id发生了变化,所有链接都会被破坏.
我的问题首先是,这是处理数据库播种的好方法吗?在上一篇文章中,我向你推荐了这个.
如果是这样,我怎么能对ID进行硬编码,这有什么缺点吗?
如果没有,那么种子数据库的最佳方法是什么?
我将真正感谢包含最佳实践的长期和深思熟虑的答案.
我试图在我的迁移中创建一个记录但是我遇到了麻烦我之前已经完成了(在我的高级开发人员的帮助下)并且我试图复制他所做的但是它似乎没有在数据库中创建记录. ..
继承人的迁移文件
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
Run Code Online (Sandbox Code Playgroud)
所以我添加了屋顶支架 - 培训部分,然后运行了一个rake db:migrate但是它没有创建记录并且没有显示在我的索引页面上.......