0

Userモデルの属性を更新するために定期的なレーキ タスクを実行しています。特定の属性が変更された場合にメーラーを実行したいのですが、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 コールバック (または同等のもの) を実行するにはどうすればよいですか? よろしくお願いします。

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 に答える