【问题标题】:Global for all models with ignore options model wise全局适用于所有模型,忽略选项模型明智
【发布时间】:2019-08-20 06:36:36
【问题描述】:

我正在使用paper_trail (10.0.1)。我已将 paper_trail 定义为可用于application_record 中的所有模型

 has_paper_trail(
   on: %i[create, update],
   ignore: %i[created_at, updated_at],
   unless: proc { |obj| CONSTANT.include?(obj.class.name) }
)

我想定义ignore 的选项,该选项适用于少数型号,专用于少数其他型号。 例如,假设我有 10 个模型,其中有 5 个模型 [created_at, updated_at] 将被忽略。其他 5 个模型有不同的属性可以忽略。

是否有可能在application_record 中定义 DEFAULT_IGNORE 选项,我们是否可以明智地在此处调用常量指定模型以忽略仅用于该模型。

【问题讨论】:

标签: ruby-on-rails paper-trail-gem


【解决方案1】:

是否有可能在 application_record 中定义 DEFAULT_IGNORE 选项,我们可以[在子类中][覆盖]常量吗?

是的,请参阅:In Ruby, is there a way to 'override' a constant in a subclass so that inherited methods use the new constant instead of the old?

但是,这里还有许多其他选项值得考虑。这是我喜欢的一种设计:

class ApplicationRecord
  def self.paper_trail_ignore
    %i[created_at updated_at]
  end
end

class Banana < ApplicationRecord
  def self.paper_trail_ignore
    %i[other_attribute]
  end
  has_paper_trail(ignore: paper_trail_ignore)
end

编辑:更新示例以避免两次调用has_paper_trail

【讨论】:

    猜你喜欢
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 2018-08-21
    • 2015-12-06
    相关资源
    最近更新 更多