0

我正在执行定期 rake 任务以更新User模型中的属性。如果特定属性已更改,我想执行 Mailer,但我无法调用attribute_changed?模块,因为它不知道要查询的实例 - 通常你会在模型中通过after_save回调执行此操作。

所以我有这个:

task :my_task => :environment do    
  User.all.each do |user|

     @howmanythings = user.things.size
     user.update_attribute(:total_things, @howmanythings)

     user.save

     //THIS IS THE BIT THAT DOES NOT WORK:

     if user.total_things_changed? == true
       SEND MAILER
     end

  end    
end

目前,用户。total_things_changed?正在返回false,无论 rake 任务是否已更新该属性。简而言之,我如何在任务中执行 after_save 回调(或等效的)?提前谢谢了。

4

1 回答 1

0

ActiveRecord::Dirty跟踪未保存的属性更改。保存模型的那一刻,foo_changed?方法将开始返回false

注意update_attribute保存模型。

你可能会做类似的事情

@howmanythings = user.things.size
user.total_things = user.things.size

if user.total_things_changed? == true
  # SEND MAILER
end

user.save

让它像你期望的那样工作。

于 2013-10-06T14:12:57.260 回答