gpt4 book ai didi

ruby-on-rails - 将 PaperTrail 应用于所有模型

转载 作者:行者123 更新时间:2023-12-03 15:45:45 25 4
gpt4 key购买 nike

我认为除了声明 has_paper_trail 之外,没有一种简单的方法可以将 PaperTrail 应用于所有模型。在每一个。
我想要完成的是将 PaperTrail(或其他 gem,如 Auditable、Vestal Versions)的功能用于所有模型。例如,我想包含由 gems 和引擎(Rails 3)生成的模型。

关于如何应用“全局”PaperTrail(或类似的 gem)的任何指示?

最佳答案

对于 Rails 5.0+ (如果应用程序具有 ApplicationRecord 类)

class ApplicationRecord < ActiveRecord::Base
def self.inherited subclass
super
subclass.send(:has_paper_trail)
end
end

对于较旧的 Rails 版本
# config/initializers/paper_trail_extension.rb 
ActiveRecord::Base.singleton_class.prepend Module.new {
def inherited subclass
super
skipped_models = ["ActiveRecord::SchemaMigration", "PaperTrail::Version", "ActiveRecord::SessionStore::Session"]
unless skipped_models.include?(subclass.to_s)
subclass.send(:has_paper_trail)
end
end
}

(在 {/} 之后使用 do/end 而不是 Module.new 很重要,因为运算符优先级)。

关于ruby-on-rails - 将 PaperTrail 应用于所有模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16972114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com