2011-04-19 127 views
4

我在理解如何在rails中使用seed.rb腳本時遇到一些困難。使用seed.rb時的最佳做法

到目前爲止,每次部署我的應用程序時,我都用它來填充我的數據庫。

像這樣。

seed.rb

["Video", "Tv"].each do |thing| 
    Category.create(name: thing) 
end 

category.rb

class Category < ActiveRecord::Base 
    validates_uniqueness_of :name 
end 

腳本現在可以拼命地跑每部署或拉。 開發團隊中的任何人現在都可以添加他們自己的類別,而不必擔心重複。

像這樣。

人一

  • 添加Table類別seed.rb
  • 提交併推送給主。

人2

  • 拉主。
  • 運行rake db:migraterake db:seed以確保本地數據庫是最新的。
  • 將應用程序部署到生產服務器。正在服務器上運行rake db:seed以確保最新的數據庫。

該工作流程是否可以,如果不是,我應該在哪裏放置新數據以確保每個開發人員都擁有最新的數據庫?

回答

5

我建議寫你的種子,這樣它可以在不試圖創建重複類別運行不止一次......

["Video", "Tv"].each do |thing| 
    Category.find_or_create_by_name(thing) 
end 
+0

使用一個字段只是一個例子。例如,我可以在桌上有一個「主動」字段。 'active'字段在運行時可能會更改,這意味着運行'Category.find_or_create_by_name_and_active(name,active)'可能會產生重複。 – Oleander 2011-04-19 21:26:39

+1

如果這個唯一的屬性是'name',那麼你可以... '[「Video」,「Tv」]。each do | name | category = Category.find_or_initialize_by_name(name) category.update_attributes(...) end' – 2011-04-20 10:21:08