如何向 Rails 4 中的所有 ActiveRecord 模型添加 `audited` 方法调用?

Posted

技术标签:

【中文标题】如何向 Rails 4 中的所有 ActiveRecord 模型添加 `audited` 方法调用?【英文标题】:How to add the `audited` method calls to all ActiveRecord models in Rails 4? 【发布时间】:2017-01-19 13:03:06 【问题描述】:

我正在将 Audited-ActiveRecord gem 添加到我的 Rails 4 应用程序中。 为了实现 gem,我需要为每个模型添加一个 audited 方法调用。

是否可以将此方法包含在单个位置,而不必将其添加到我的每个 ActiveRecord 模型中?

https://rubygems.org/gems/audited-activerecord

经过审核的 gem 允许我将 audited 粘贴到每个模型中,但是因为我正在尝试添加审核,而不必将 audited 粘贴到 50 多个现有模型以及未来模型中。

例如:

class ModelOne < ActiveRecord::Base
  audited
  ...
end

class ModelTwo < ActiveRecord::Base
  audited
  ...
end

class ModelN < ActiveRecord::Base
  audited
  ...
end

【问题讨论】:

感谢大家的帮助。我最终只是将audited 方法手动添加到每个 ActiveRecord 模型中,如问题所示。 【参考方案1】:

您可以使用concerns 来执行此操作,但是您必须在每个模型文件中包含来自concerns 的此模块。例如:

class SomethingModel
  include Auditable
  #...
end

class OtherModel
  include Auditable
  #...
end


# app/models/concerns/auditable.rb
module Auditable
  extend ActiveSupport::Concern
  #Your methods from Audited-Active-Record
end

【讨论】:

我尝试了几种不同的方法,但结果抛出异常。这个答案确实帮助我找到了一个不同的答案,让我找到了最终的方法。 ***.com/questions/20824470/… 再次感谢。【参考方案2】:

您可以使用初始化程序在 ActiveRecord::Base 上调用 audited。这会将它包含到您的所有 ActiveRecord 模型中。

# config/initializers/audited.rb
module Audited
  extend ActiveSupport::Concern

  included do
    audited
  end
end

ActiveRecord::Base.include Audited

【讨论】:

以上是关于如何向 Rails 4 中的所有 ActiveRecord 模型添加 `audited` 方法调用?的主要内容,如果未能解决你的问题,请参考以下文章

Rails 中的表关联 - ActiveRecord

包含 Ruby on Rails 内容的播放列表

如何将消息发送给除 rails/actioncable 中的发件人之外的所有客户端?

如何让我的 Rails 5 日志向我显示与 Rails 4 一样的每个操作的详细信息?

Rails 隔离引擎模型关联

向 Rails 4 添加自定义字体的官方方式?