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)
我想要实现的是仅在满足某些条件的情况下监视字段的版本。例如: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)