Есть ли способ обрабатывать `after_save` и` after_destroy` "одинаково"? - PullRequest
12 голосов
/ 15 января 2012

Я использую Rails 3.1.0, и я хотел бы знать, можно ли обрабатывать обратные вызовы after_save и after_destroy "одинаково".То есть мне нужно запускать одни и те же методы для обратных вызовов after_save и after_destroy.

В настоящее время я должен обрабатывать эти обратные вызовы отдельно, даже если они выполняют одно и то же:

after_save do |record|
  # Make a thing
end

after_destroy do |record|
  # Make the same thing as in the 'after_save' callback
end

Итак, существует способ обработки after_save и after_destroy "одинаково"?

Ответы [ 3 ]

29 голосов
/ 15 января 2012

Вместо блока укажите after_save и after_destroy имя метода вашей модели в виде символа.

class ModelName < AR
  after_save :same_callback_method
  after_destroy :same_callback_method

  def same_callback_method
    # do the same for both callbacks
  end
end
8 голосов
/ 18 апреля 2014

Чтобы выполнить один и тот же обратный вызов после сохранения и уничтожения, вы можете использовать after_commit

after_commit do |record|
  # Is called after creating, updating, and destroying.
end

http://apidock.com/rails/ActiveRecord/Transactions/ClassMethods/after_commit

7 голосов
/ 15 января 2012
class Foo < ActiveRecord::Base
  after_save :my_callback
  after_destroy :my_callback

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