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

时间:2015-01-05 14:33:59

标签: ruby-on-rails

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

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

2 个答案:

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