我在模型回调(after_save)中,其中一个属性是BigDecimal类型。因此,当我使用changes
方法更改另一个属性并检查脏属性时,我有:
{"amount"=>[#<BigDecimal:7f86aa3ac900,'-0.4E3',9(18)>, #<BigDecimal:7f86aa3ac838,'-0.4E3',9(18)>], "description"=>["vvvv", "ccc"]}
它将数量实例化为BigDecimal,并将object_id作为更改的一部分。
有人知道如何避免这种行为吗?
答案 0 :(得分:0)
如果在after_save中你需要检查一个特定的BigDecimal字段是否真的被改变了,你需要重新加载rails创建的方法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