我是第一次尝试seeds.rb,我的一个数据模型使用了money gem提供的封装。
相关宝石:
money (3.6.1)
rails (3.0.5)
到目前为止我的模型:
app/models/list.rb
class List < ActiveRecord::Base
attr_accessible :alias, :unit, :participating_manufacturer, :quantity
:latest_price_cents, :latest_price_currency, :url
belongs_to :user
composed_of :latest_price,
:class_name => "Money",
:mapping => [%w(latest_price_cents latest_price_cents), %w(latest_price_currency currency_as_string)],
:constructor => Proc.new {
|latest_price_cents, latest_price_currency| Money.new(latest_price_cents ||
0, latest_price_currency || Money.default_currency)
},
:converter => Proc.new {
|value| value.respond_to?(:to_money) ? value.to_money : raise(ArgumentError,
"Can't convert #{value.class} to Money")
}
end
1)(成功解决)
2)当我开始编写验证时,最好是为:latest_price属性或者:latest_price_cents&amp; :latest_price_currency属性分开?
/db/seeds.rb
users = User.create([{ :name => "Foo", :email => "foo@gmail.com",
:password => "foobar", :password_confirmation => "foobar" }])
# etc, will add more users to the array
list = List.create(:user_id => users.first.id, :alias => "Januvia 100mg",
:unit => "tablet", :participating_manufacturer => "Merck",
:quantity => 30, :latest_price_cents => 7500,
:latest_price_currency => "USD", :url =>
"http://www.foobar.com/januvia/100mg-tablets/")
3)也许它是细枝末节,但在种子中,我应该直接为virtual:latest_price属性或者latest_price_cents和latest_price_currency属性赋值吗?有没有办法使用faker而不是/db/seeds.rb来执行此任务?
我是rails和web开发的新手。
答案 0 :(得分:0)
我无法在任何地方看到您的latest_price
属性,因此我不确定如何回答您的问题。通常,您应验证在用户表单中输入的属性。因此,如果用户在表单中输入latest_price_cents
和latest_price_currency
,那么他们就是需要验证的内容。
您的种子文件中存在错误。在创建新用户时,您希望传入哈希,而不是数组;并且users
应该是一个数组。
users = []
users << User.create!(:name => "Foo",
:email => "foo@gmail.com",
:password => "foobar",)
:password_confirmation => "foobar")
但是,如果您因为想要创建一些虚拟数据而考虑使用faker,请查看Machinist或Factory Girl。它们专为创建虚拟数据而设计,通常用于自动化测试。
设置了一些蓝图后,如果要在种子文件中创建虚拟数据,可以在seeds.rb
中执行以下操作:
20.times { List.make } unless Rails.env.production?