使用update_attributeS为money gem转换Money属性

时间:2012-08-17 16:12:07

标签: ruby-on-rails currency

请考虑产品类的两个对象:

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
}

假设我有两个对象:

  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&amp;零售和成本金额为2100美元。虽然利润率非常好 - 不太现实。

显然我可以在更新属性之前对b对象进行某种处理(例如不更新money字段并逐个单独执行),但这并不是很有效。所以我想知道我做错了什么

谢谢

1 个答案:

答案 0 :(得分:0)

我切换到了https://github.com/RubyMoney/money-rails gem而不是解决了问题