跟踪对象更改rails(活动模型脏)

时间:2014-05-27 09:15:17

标签: ruby-on-rails activerecord

我正在尝试跟踪某个方法的更改,就像我们使用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是具有终端表的列的属性。

1 个答案:

答案 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

这解决了这个问题,但如果你有很多自定义属性,这不是一个很好的解决方案。