我有一个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"
这里的想法是,我想为用户安装一些股票主题。我对此方法有疑问。
设置ID无效。这意味着如果我决定添加一个主题,我们将其称为“红色”,那么我只想将主题语句添加到此Fixture文件中,并调用rake任务重新设置数据库的种子。如果这样做,因为主题属于其他对象,并且在重新初始化时更改了它们的ID,则所有链接都将断开。
我的问题是首先,这是处理种子数据库的好方法吗?在以前的帖子中,这是向我推荐的。
如果是这样,我该如何对ID进行硬编码,这有什么缺点?
如果不是,播种数据库的最佳方法是什么?
我将不胜感激,并经过深思熟虑,并结合了最佳实践。