Rails 3 метод run_callbacks - PullRequest
       0

Rails 3 метод run_callbacks

14 голосов
/ 07 сентября 2010

Я играю с новым 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 callback?

Просмотр кода 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) (выдает ошибку неопределенного метода) и u.run_callbacks(:save, :before) запускает все обратные вызовы save ( до и после ).

Ответы [ 2 ]

8 голосов
/ 24 сентября 2010

Похоже, вы столкнулись с ошибкой в ​​Rails 3.0.Похоже, что он находится в очереди на 3.0.1, как указано в в этом билете на маяк .

Как говорит @venables, вы можете по крайней мере получить обратные вызовы before_save, отправив falseдо run_callbacks(:save).

6 голосов
/ 24 сентября 2010

Я все еще изучаю, как сделать только after_save, но чтобы запустить ПРОСТО обратный вызов before_save, вы можете сделать что-то вроде:

u.run_callbacks(:save) { false }

Это должно отменить обратные вызовы после запуска before_save.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...