What | Rails version | Within before_*
|
Within after_*
|
---|---|---|---|
Cancel later callbacks | Rails 1-4 | return false |
return false |
Cancel later callbacks | Rails 5+ | throw :abort |
throw :abort |
Rollback the transaction | Rails 1-4 | return false |
raise ActiveRecord::Rollback |
Rollback the transaction | Rails 5+ | throw :abort |
raise ActiveRecord::Rollback |
Take care that your callbacks don't accidentally return false
, since that cancels the chain in Rails 1-4 (returning nil
is fine, though). Since in Ruby the last expression of a method becomes its return value automatically, this can happen accidentally:
before_save :callback
def callback
call_to_method_that_happens_to_return_false
end
If uncertain, return true
explicitely:
before_save :callback
def callback
call_to_method_that_happens_to_return_false
true
end
When a callback raises an error
Exceptions raised in callbacks always rollback the transaction, but only exceptions that are not ActiveRecord::Rollback
will bubble up to the caller.
Further reading
Posted by Henning Koch to makandra dev (2013-12-05 08:31)