我有一個rake任務,填充我的rails應用程序中的一些初始數據。例如,國家,州,移動運營商等在Rails中建立數據庫的最佳方式是什麼?
我現在設置的方式是,我有一堆創建語句在/ db /夾具文件和一個耙子任務處理它們。例如,我擁有的一個模型是主題。我在/ DB /夾具一個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不起作用。這意味着如果我決定添加一個主題,我們將其稱爲'Red',那麼我只想將主題語句添加到該夾具文件並調用rake任務來重新設置數據庫。如果我這樣做,因爲主題屬於其他對象,並且在重新初始化時它們的ID發生了變化,所有鏈接都被打破。
我的問題是首先,這是處理播種數據庫的好方法嗎?在之前的文章中,這是向我推薦的。
如果是這樣,我該如何硬編碼ID,並有什麼缺點呢?
如果不是,種子數據庫的最佳方法是什麼?
我真的很感激長期以來想出的結合最佳實踐的答案。
你能接受更新的答案嗎? – 2011-02-24 20:03:38
剛剛做到了。感謝提醒 – Tony 2011-03-01 15:33:17