0

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

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

有没有比将它存储在更好的方法seed.rb

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

2 回答 2

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
于 2012-05-11T21:14:45.330 回答
1

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
于 2012-05-14T09:22:20.593 回答