2009-01-28 62 views
2

我必須具體說明這一點。在我的應用程序中,我有一個稱爲主題的模型,其中包含小部件顏色主題信息我們提供了幾個主題,但主要依賴用戶創建自己的主題。所以問題是:我在哪裏存儲我的主題?如果我將它們存儲在主題數據庫中,那麼無論何時我在切換數據庫或在測試期間刷新數據庫時,都必須重新輸入主題。這不是一個大問題,它看起來很sl。。對於我的一個模型,我有幾個應該自動填充的實例。我該如何處理?

現在我把主題存儲在控制器的散列中。問題在於每個小部件都有一個主題,每個小部件都有一個theme_id,並且我們提供的主題沒有theme_id,因爲它們不存儲在數據庫中。

我知道這個問題的解決方案非常簡單,但我想確保我的解決方案採用最佳編碼實踐。有沒有人對此有任何建議?也許有一種方法可以在遷移或其他rake任務期間向數據庫中添加條目...

謝謝!

Tony

回答

4

在遷移加載種子數據是最有意義的,亦是我經常做。如果創建這些前幾條記錄確實是表的正確初始化的一部分,也就是說,如果您的表無法在您的應用程序中完成您所需的工作,那麼它們就屬於遷移。 Rake任務非常適合捕獲需要在命令中加載到應用程序中的數據集(例如,用於演示),但是如果某些記錄需要始終如一地需要,遷移就是現場。

3

主題數據屬於數據庫。

要進行測試,請使用燈具或setup方法初始化主題數據。對於開發和生產,您應該創建一種方法,使用初始主題數據爲數據庫創建種子。自定義Rake任務對此很有幫助。實際的主題數據可以以您希望的任何格式存儲,真的。例如SQL腳本或YML fixtures

我用下面的Rake任務種子與DB/seeddata內SQL文件中保存數據的數據庫(把它放進一個.rake文件項目的/ lib目錄下):

namespace :db do 
    desc "Load seed fixtures (from db/seeddata) into the current environment's database." 
    task :seed => :environment do 
    require 'yaml' 
    config = YAML::load(open("#{RAILS_ROOT}/config/database.yml"))["#{RAILS_ENV}"] 
    Dir.glob(RAILS_ROOT + '/db/seeddata/*.sql').each do |file| 
     cmd = "mysql -u #{config['username']} -p#{config['password']} -h #{config['host']} #{config['database']} < #{file}" 
     `#{cmd}` 
    end 
    end 
end 
1

你的想法種子數據似乎是要走的路。我喜歡你提出的方法,但你如何看待這裏提出的方法: http://railspikes.com/2008/2/1/loading-seed-data

它建議你讓ActiveRecord處理種子數據,以便它可以驗證數據。

你認爲哪個更好?

再次感謝!

託尼

+0

我認爲這取決於種子數據來自何處。我自己生成我的,所以我知道這將是有效的,並且可以使用更簡單的方法。 – 2009-01-28 22:08:48

相關問題