有一种方法可以同样处理`after_save`和`after_destroy`"吗?

Bac*_*cko 12 ruby ruby-on-rails callback ruby-on-rails-3 ruby-on-rails-3.1

我正在使用Rails 3.1.0,我想知道是否可以"同等" 地处理after_saveafter_destroy回调.也就是说,我需要为两者after_saveafter_destroy回调运行相同的方法.

此时我必须单独处理这些回调,即使这些回调完成了同样的事情:

after_save do |record|
  # Make a thing
end

after_destroy do |record|
  # Make the same thing as in the 'after_save' callback
end
Run Code Online (Sandbox Code Playgroud)

那么,有一种方法可以处理after_saveafter_destroy"平等"吗?

Vap*_*ire 29

而不是块给出after_saveafter_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
Run Code Online (Sandbox Code Playgroud)

  • 使用`class`关键字定义类,而不是`def`关键字. (2认同)

sho*_*one 8

要在保存和销毁后执行相同的回调,您可以使用 after_commit

after_commit do |record|
  # Is called after creating, updating, and destroying.
end
Run Code Online (Sandbox Code Playgroud)

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


Gaz*_*ler 7

class Foo < ActiveRecord::Base
  after_save :my_callback
  after_destroy :my_callback

  private
  def my_callback
    #Do stuff
  end
end
Run Code Online (Sandbox Code Playgroud)