Active Model Callbacks
Provides an interface for any class to have Active Record like callbacks.
Like the Active Record methods, the callback
chain is aborted as soon as one of the methods in the chain returns
false
.
First, extend ActiveModel::Callbacks from the class you are creating:
class MyModel extend ActiveModel::Callbacks end
Then define a list of methods that you want callbacks attached to:
define_model_callbacks :create, :update
This will provide all three standard callbacks (before, around and after)
for both the :create
and :update
methods. To
implement, you need to wrap the methods you want callbacks on in a block so
that the callbacks get a chance to fire:
def create run_callbacks :create do # Your create action methods here end end
Then in your class, you can use the before_create
,
after_create
and around_create
methods, just as
you would in an Active Record model.
before_create :action_before_create def action_before_create # Your code here end
When defining an around callback remember to yield to the block, otherwise it won't be executed:
around_create :log_status def log_status puts 'going to call the block...' yield puts 'block successfully called.' end
You can choose not to have all three callbacks by passing a hash to the
define_model_callbacks
method.
define_model_callbacks :create, only: [:after, :before]
Would only create the after_create
and
before_create
callback methods in your class.