我正在尝试跟踪某个方法的更改,就像我们使用Active Model Dirty跟踪记录属性的更改一样。
目前我正在使用此方法检查对一组属性的更改。
def check_updated_attributes
watch_attrs = ["brand_id", "name", "price", "default_price_tag_id", "terminal_usp", "primary_offer_id", "secondary_offer_id"]
if (self.changed & watch_attrs).any?
self.tag_updated_at = Time.now
end
end
但是,属性价格不是具有列的常规属性,而是在模型中定义的方法,该方法组合了两个不同的属性。
这是方法:
def price
if manual_price
price = manual_price
else
price = round_99(base_price)
end
price.to_f
end
有没有办法跟踪这种价格方法的变化?或者这只适用于普通属性?
修改:基本价格法:
def base_price(rate = Setting.base_margin, mva = Setting.mva)
(cost_price_map / (1 - rate.to_f)) * ( 1 + mva.to_f)
end
cost_price和manual_price是具有终端表的列的属性。
答案 0 :(得分:0)
好的,解决了。
我必须创建一个名为price_changed的自定义方法?检查价格是否已经改变。
def price_changed?
if manual_price
manual_price_changed?
elsif cost_price_map_changed?
round_99(base_price) != round_99(base_price(cost_price = read_attribute(:cost_price_map)))
else
false
end
end
这解决了这个问题,但如果你有很多自定义属性,这不是一个很好的解决方案。