Помимо Ответ Тома Харрисона-младшего о регистрации и мониторинге, я обнаружил, что ключевым отличием является получение контроля над тем, выполняется ли операция вообще . В противном случае вы можете реализовать свои собственные обратные вызовы before_*
и after_*
, чтобы сделать то же самое.
Взять, к примеру, around_update
. Допустим, у вас есть случай, когда вы не хотите запускать обновление. Например, я создаю драгоценный камень, который сохраняет черновики в другой таблице drafts
, но не сохраняет определенные обновления в главной таблице.
around_update :save_update_for_draft
private
def save_update_for_draft
yield if update_base_record?
end
Детали метода update_base_record?
, на которые здесь ссылаются, на самом деле не имеют значения. Вы можете видеть, что операция обновления просто не будет выполняться, если этот метод не оценивается как true
.