Рельсы множественные условия в бумажном следе - PullRequest
1 голос
/ 08 апреля 2020

То, чего я пытаюсь добиться, - это только отслеживать версии полей, если выполняются определенные условия. Например: field_a, field_b, field_ c, если условие_a истинно, и field_d, field_e, field_f, если условие_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? являются частными методами для моей модели, которая возвращает логическое значение)
Но в этом случае, кажется, работает только вторая строка кода (но выполняется дважды).

Возможно ли вообще достичь такого поведения?

1 Ответ

1 голос
/ 08 апреля 2020

Согласно документации PaperTrail (https://github.com/paper-trail-gem/paper_trail#only):

Параметры: ignore и: only также могут принимать аргументы Ha sh.

Это означает, что вы можете использовать это решение:

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? }

(передача символа с именем метода вместо pro c будет работать из-за метода Ruby :to_proc - вы можете узнать больше о это в этом посте )

...