我需要一个仅在更新某些字段时更新的时间戳列,例如,如果产品名称发生更改,则应使用Time.now更新attributes_updated_at字段。我不希望在添加外键关联或product.status
从'pending'
更改为'active'
的情况下更新字段。
有没有办法在模型中定义它?
答案 0 :(得分:2)
你可以尝试一下
让我们考虑一下Product
模型
class Product < ActiveRecord::Base
belongs_to :user
before_save :stop_update_time_stamps
def stop_update_time_stamp
self.class.record_timestamps = false if self.status.changed? || self.user_id.changed?
end
end
答案 1 :(得分:0)
我认为您的问题是数据库问题,而不是红宝石问题。
您可以使用例如数据库触发器(这是mysql代码)来实现所需的行为。
CREATE TRIGGER trigger_product AFTER UPDATE ON product
FOR EACH ROW
BEGIN
IF (NEW.name <> OLD.name) or (NEW.category <> OLD.category)
THEN set NEW.updated_at = NOW();
END;