Define sets of events in the object life cycle that support callbacks.
1 2 | define_callbacks :validate define_callbacks :initialize , :save , :destroy |
Options
-
:terminator
- Determines when a before filter will halt the callback chain, preventing following callbacks from being called and the event from being triggered. This should be a lambda to be executed. The current object and the return result of the callback will be called with the lambda.1define_callbacks
:validate
, terminator: ->(target, result) { result ==
false
}
In this example, if any before validate callbacks returns
false
, other callbacks are not executed. Defaults tofalse
, meaning no value halts the chain. -
:skip_after_callbacks_if_terminated
- Determines if after callbacks should be terminated by the:terminator
option. By default after callbacks executed no matter if callback chain was terminated or not. Option makes sense only when:terminator
option is specified. -
:scope
- Indicates which methods should be executed when an object is used as a callback.12345678910111213141516171819202122class
Audit
def
before(caller)
puts
'Audit: before is called'
end
def
before_save(caller)
puts
'Audit: before_save is called'
end
end
class
Account
include ActiveSupport::Callbacks
define_callbacks
:save
set_callback
:save
,
:before
, Audit.
new
def
save
run_callbacks
:save
do
puts
'save in main'
end
end
end
In the above case whenever you save an account the method
Audit#before
will be called. On the other hand1define_callbacks
:save
, scope: [
:kind
,
:name
]
would trigger
Audit#before_save
instead. That's constructed by calling#{kind}_#{name}
on the given instance. In this case âkindâ is âbeforeâ and ânameâ is âsaveâ. In this context:kind
and:name
have special meanings::kind
refers to the kind of callback (before/after/around) and:name
refers to the method on which callbacks are being defined.A declaration like
1define_callbacks
:save
, scope: [
:name
]
would call
Audit#save
.
Please login to continue.