如何为所有模型创建一个共同的after_create回调?

时间:2017-08-01 19:01:21

标签: ruby-on-rails ruby-on-rails-4

考虑我有模型用户,帐户和产品。我想要一个共同的after_create回调,所有这些模型都说log_creation。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

您可以拥有global并将其包含在您希望的任何模型中

GenericModule

在模型中

module GenericModule
  extend ActiveSupport::Concern

  included do
    after_create :log_creation
  end

  def log_creation
    # perform logging
  end
end

您可以在需要此行为的所有模型中使用此功能。

答案 1 :(得分:0)

来自ActiveRecord Callbacks上的Ruby on Rails指南:

Active Record可以创建封装回调方法的类,因此重用它们变得非常容易。

这是我们创建一个带有PictureFile模型的after_destroy回调的类的示例:

class PictureFileCallbacks
  def after_destroy(picture_file)
    if File.exists?(picture_file.filepath)
      File.delete(picture_file.filepath)
    end
  end
end

当在类中声明时,如上所述,回调方法将接收模型对象作为参数。我们现在可以在模型中使用回调类:

class PictureFile < ActiveRecord::Base
  after_destroy PictureFileCallbacks.new
end