如何向 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/actioncable 中的发件人之外的所有客户端?