请考虑类产品的两个对象:
class Product < ActiveRecord::Base {
:id => :integer,
:name => :string,
:total_stock => :integer,
:cents_retail_sale_amount => :integer,
:cents_cost_amount => :integer,
:created_at => :datetime,
:updated_at => :datetime
}
假设我有 2 个对象:
a{
:id => 12,
:name => "Shirt",
:total_stock => 1,
:cents_retail_sale_amount => 2500,
:cents_cost_amount => 2100,
:created_at => Mon, 23 Jul 2012 16:16:33 CDT -05:00,
:updated_at => Mon, 23 Jul 2012 17:24:15 CDT -05:00}
b {
:id => nil,
:name => "Polo Shirt",
:total_stock => 1,
:cents_retail_sale_amount => 2500,
:cents_cost_amount => 2100,
:created_at => Mon, 23 Jul 2012 16:16:33 CDT -05:00,
:updated_at => Mon, 23 Jul 2012 17:24:15 CDT -05:00}
现在这就是我要做的:
a.update_attributes(b.to_product.attributes.except("id", "created_at", "updated_at")
然而,问题(我发现只是因为我对美分字段进行了验证 - 只允许 0 到 100 美元(10000 美分)之间的金额),是这样的 - 我的美分字段也会更新并在最后获得额外的 00 - 所以我得到 $2500 和 $2100 的零售和成本金额。虽然利润率真的很好 - 不是很现实。
我显然可以在更新属性之前对 b 对象进行某种处理(例如不更新货币字段并逐个单独执行),但这并不真正有效。所以我想知道我是否做错了什么
谢谢
我改用 https://github.com/RubyMoney/money-rails gem 解决了这个问题