如何更新某些属性时更新时间戳?

我需要一个仅在更新某些字段时更新的时间戳列,例如,如果产品名称发生更改,则应使用Time.now更新attributes_updated_at字段。 我不希望在添加外键关联的情况下更新字段,或者如果product.status'pending'更改为'active'

有没有办法在模型中简单地定义它?

你可以尝试一下

让我们考虑您有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 

我相信你的问题是数据库问题而不是ruby问题。

您可以使用例如数据库触发器(这是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;