2015-06-02 27 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