我正在执行定期佣金任务来更新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回调(或等效)?非常感谢提前。
答案 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
让它像你期望的那样工作。