2012-08-17 28 views
0

請考慮類產品的兩個對象:轉換貨幣的屬性,使用金錢的寶石update_attributes方法

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對象進行某種處理,但這並不十分有效。所以我想知道如果我做錯了

感謝

回答