在rake任务中查询已更改的模型属性

时间:2013-10-06 13:57:42

标签: ruby-on-rails ruby model callback task

我正在执行定期佣金任务来更新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

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

1 个答案:

答案 0 :(得分: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

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