2015-06-02 55 views
3

我處於模型回調(after_save)中,其中一個屬性是BigDecimal類型。所以,當我改變另一個屬性,並檢查與changes方法骯髒的屬性我有這樣的:DirtyAttributes作爲已更改的BigDecimal類型

{"amount"=>[#<BigDecimal:7f86aa3ac900,'-0.4E3',9(18)>, #<BigDecimal:7f86aa3ac838,'-0.4E3',9(18)>], "description"=>["vvvv", "ccc"]} 

它實例化量BigDecimal和需要OBJECT_ID作爲變化的一部分。

有沒有人有如何避免這種行爲的想法?

回答

0

如果after_save的,你需要檢查是否有特定的BigDecimal場真的變了,你需要重新加載軌道創建方法attr_name_changed?(你的情況amount_changed?):

def amount_changed? 
    if amount_change.present? 
    amount_change[0].to_f != amount_change[1].to_f 
    end 
end 

它所做之前比較( amount_change[0])和之後(amount_change[1])值以浮點形式顯示。

所以後來在after_save的回調函數,你可以這樣做:

after_save :do_something_if_amount_changed 

def do_something_if_amount_changed 
    if amount_changed? 
    do_something 
    end 
end