Метод Rails 3 run_callbacks
Я играю с новым Rails 3 API, и у меня есть вопрос относительно нового метода run_callbacks (kind, * args, & block)
В следующем коде:
class User < ActiveRecord::Base
before_save :say_hi
after_save :say_bye
private
def say_hi; puts "hi"; end
def say_bye; puts "bye"; end
end
Я могу явным образом вызвать обратные вызовы при сохранении путем запуска:
> u.run_callbacks(:save)
hi
bye
=> true
Но мой вопрос, как я могу только запускать обратный вызов before_save или after_save?
Просмотр кода run_callbacks(kind, *args, &block)
:
# File activesupport/lib/active_support/callbacks.rb, line 92
def run_callbacks(kind, *args, &block)
send("_run_#{kind}_callbacks", *args, &block)
end
Я не знаю, как построить *args
только для вызова до или после обратных вызовов, я пробовал что-то вроде u.run_callbacks(:before_save)
(дает мне ошибку метода undefined) и u.run_callbacks(:save, :before)
запускает все обратные вызовы сохранения (до и после после того, как).
Ответы
Ответ 1
Похоже, вы столкнулись с ошибкой в Rails 3.0. Кажется, он находится в очереди на 3.0.1, как указано в этот маяк.
Как сообщает @venables, вы можете, по крайней мере, запустить обратные вызовы before_save, отправив false
в run_callbacks(:save)
.
Ответ 2
Я все еще смотрю, как делать только after_save, но для запуска JUST обратного вызова before_save вы можете сделать что-то вроде:
u.run_callbacks(:save) { false }
Это должно отменить обратные вызовы после запуска before_save.