2

保存後のコールバックがあります:

after_save :do_an_expensive_task_on_basis_of_flag_value

後で、これは非常にコストのかかるタスクであり、フラグの値が設定されていない場合 (作成時) またはフラグの値が更新時に更新されない場合に呼び出すのは意味がないことに気付きました。

だから、私ができることの1つは、それを次のように置き換えることです:

after_create :do_an_expensive_task_on_basis_of_flag_value , :if => Proc.new {|a| a.flag.present?}
after_update :do_an_expensive_task_on_basis_of_flag_value , :if => Proc.new {|a| a.flag_changed?}

しかし、作成時にフラグが設定され、更新時にフラグが更新された場合にのみこのタスクが呼び出されるようなprocを備えたワンライナーを探しています:after_save

注: これは正しい方法ではありません。

after_save :do_an_expensive_task_on_basis_of_flag_value , :if => Proc.new {|a| a.flag.present? or a.flag_changed?}

フラグが変更されていない場合でも、 update で callback を呼び出します。

4

2 に答える 2

4

a.flag_changed?どちらの場合にも機能します。しかし、あなたの知識のために、次のようにすることができます:

after_save :do_an_expensive_task_on_basis_of_flag_value , :if => Proc.new {|a| (new_record? and a.flag.present?) or a.flag_changed?}
于 2013-10-29T14:15:43.803 に答える