Rails:从回调中跳过回调

时间:2012-07-04 02:44:59

标签: ruby-on-rails ruby-on-rails-3 activerecord mongoid

我的模型中定义了以下after_save回调。

after_save :validate_image, :publish, :update_some_data, :send_notifications

是否可以根据after_save中的某些条件跳过其余的validate_image回调,所以像这样 -

def validate_image
  if image_not_valid
    # skip rest of the callbacks in the after_save chain
    destroy # destroy this record
  end
end

注意: - 我也在基于该条件销毁记录,并且我有一些需要执行的“after_destroy”回调。

我正在使用Rails v3.2.6和Mongoid v2.4.10,但我想如果它是ActiveRecord就没有区别。

2 个答案:

答案 0 :(得分:0)

像这样更改你的before_save定义

after_save do
   validate_image
   unless image_not_valid
       publish 
       update_some_data 
       send_notifications
   end
end

答案 1 :(得分:0)

使用ActiveRecord:

http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

  

如果before_ *回调返回false,则取消所有后续回调和相关操作。如果after_ *回调返回false,则取消所有后续回调

使用常规回调,一旦返回false

,只会停止before_ *回调