Я прочитал документацию по адресу http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html , но не понимаю, когда around_*
срабатывают обратные вызовы относительно before_*
и after_*
.
Любая помощь очень ценится.
Спасибо.
Я прочитал документацию по адресу http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html , но не понимаю, когда around_*
срабатывают обратные вызовы относительно before_*
и after_*
.
Любая помощь очень ценится.
Спасибо.
Ответы:
around_*
обратные вызовы вызываются перед действием, затем, когда вы хотите вызвать само действие, вы yield
переходите к нему, а затем продолжаете выполнение. Вот почему это называетсяaround
Порядок выглядит следующим образом : before
, around
, after
.
Итак, типичный вариант around_save
будет выглядеть так:
def around_save
#do something...
yield #saves
#do something else...
end
Обратный вызов around_ * вызывается вокруг действия и внутри действий before_ * и after_ *. Например:
class User
def before_save
puts 'before save'
end
def after_save
puts 'after_save'
end
def around_save
puts 'in around save'
yield # User saved
puts 'out around save'
end
end
User.save
before save
in around save
out around save
after_save
=> true