Rails paper-trail 中的多个条件

Rails multiple conditions in paper-trail

我想要实现的是仅在满足某些条件的情况下监视字段的版本。例如:field_a、field_b、field_c 如果 condition_a 为真,field_d、field_e、field_f 如果 condition_b 是真的。
我模式中的代码是:

has_paper_trail only: [:field_a, :field_b, :field_c], if: Proc.new { |cand| cand.condition_a? }

has_paper_trail only: [:field_d, :field_e, :field_f], if: Proc.new { |cand| cand.condition_b? }

.condition_a?.condition_b? 是我模型的私有方法,即 returns 布尔值)
但在那种情况下,只有第二行代码似乎有效(但执行了两次)。

是否有可能实现这种行为?

根据 PaperTrail 的文档 (https://github.com/paper-trail-gem/paper_trail#only):

The :ignore and :only options can also accept Hash arguments.

这意味着您可以使用此解决方案:

has_paper_trail only: { field_a: :condition_a?, field_b: :condition_a?, field_c: :condition_a?, field_d: :condition_b?, field_e: :condition_b?, field_f: :condition_b? }

(由于 Ruby :to_proc 方法,传递带有方法名称而不是 proc 的符号将起作用 - 您可以阅读更多相关信息 in this blogpost