Rails 3:如何将数组播种到seed.rb?

时间:2012-05-11 21:10:57

标签: ruby-on-rails activerecord

我有一个只有interests属性的:name表。

我正在尝试播种(通过seed.rb)以下数组,以便它们都以我的形式显示(复选框)...我该怎么做?

有没有比在seed.rb中存储更好的方法?

[ "Adventure Sports", "Arts and Crafts", "Beauty/Hair", 
  "Books", "Dining Out", "Fine Art", "Fine Jewelry", 
  "Gardening", "Golf" ]

2 个答案:

答案 0 :(得分:5)

如果您想将它放入seed.rb中,您可以像在其他地方一样创建它们,例如

[ "Adventure Sports", "Arts and Crafts"].each do |interest|
  Interest.create!({:name => interest})
end

或者,您可以将它们作为常量存储在模型中,并在表单中使用它。

class Interest < ActiveRecord::Base
  INTERESTS = [ "Adventure Sports", "Arts and Crafts" ]
end

然后以你的形式,例如:

f.select Interest::INTERESTS

答案 1 :(得分:0)

我正在使用find_or_create_by_...来确保即使再次运行seeds.rb也只创建一次记录:

[ "Adventure Sports", "Arts and Crafts"].each do |interest|
  Interest.find_or_create_by_name(interest)
end

name是列名。如果列名是例如title使用find_or_create_by_title

它也可用于设置多个列,例如:

[["Adam", 10], ["Allan", 20], ["Andy", 30]].each do |data|
  role = Role.find_by_name("editor").id
  User.find_or_create_by_name_and_credits_and_role_id(data[0], data[1], role)
end