Method: ActiveModel::Callbacks#define_model_callbacks
- Defined in:
- lib/active_model/callbacks.rb
#define_model_callbacks(*callbacks) ⇒ Object
define_model_callbacks accepts the same options define_callbacks does, in case you want to overwrite a default. Besides that, it also accepts an :only option, where you can choose if you want all types (before, around or after) or just some.
define_model_callbacks :initializer, :only => :after
Note, the :only => <type> hash will apply to all callbacks defined on that method call. To get around this you can call the define_model_callbacks method as many times as you need.
define_model_callbacks :create, :only => :after
define_model_callbacks :update, :only => :before
define_model_callbacks :destroy, :only => :around
Would create after_create, before_update and around_destroy methods only.
You can pass in a class to before_<type>, after_<type> and around_<type>, in which case the callback will call that class’s <action>_<type> method passing the object that the callback is being called on.
class MyModel
extend ActiveModel::Callbacks
define_model_callbacks :create
before_create AnotherClass
end
class AnotherClass
def self.before_create( obj )
# obj is the MyModel instance that the callback is being called on
end
end
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/active_model/callbacks.rb', line 88 def define_model_callbacks(*callbacks) = callbacks. = { :terminator => "result == false", :scope => [:kind, :name], :only => [:before, :around, :after] }.merge() types = Array.wrap(.delete(:only)) callbacks.each do |callback| define_callbacks(callback, ) types.each do |type| send("_define_#{type}_model_callback", self, callback) end end end |