ActiveSupport ::关注初始化前后的运行方法

时间:2019-02-20 13:14:50

标签: ruby-on-rails ruby activesupport-concern

ActiveSupport::Concern是否支持一种在构造对象之前或之后运行方法的方法。

例如实现类似

Module Benchmarker

  extend ActiveSupport::Concern

  before_initialize
    @constructed_at = DateTime.now
  end

end

(注意:ActiveRecord或ActiveController不需要此功能。只是Rails项目中的通用Ruby类。)

1 个答案:

答案 0 :(得分:1)

注意:这将适用于模型或仅继承自ActiveRecord的那些类。

Rails不支持before_initialize回调。您可以改用after_initialize回调。但是,在关注中使用它时,您需要在included do..end块中提及它。例如,以下代码应适用于您的用例:

Module Benchmarker
  extend ActiveSupport::Concern

  included do
    after_initialize do |subject|
      p "I'm in after_initialize"
    end
  end
end

有关included挂钩如何工作的更多详细信息,请参考this answer