Измените или создайте версию paper_trail с альтернативным значением атрибута

#ruby-on-rails #ruby #paper-trail-gem

Вопрос:

У меня есть модель с датой начала и датой окончания.

При создании версии, если старая дата окончания находится после новой даты начала, то для даты окончания в версии paper_trail должно быть установлено значение дата начала обновленной записи

В коде sudo это может выглядеть так…

(не работает, и я бы предпочел не изменять версию после ее создания)

 record.save
version = paper_trail.previous_version
if (version.end_date > record.start_date)
  version.end_date = record.start_date
  version.save
end
 

Последовательность будет выглядеть так…

Создать запись

 record: start_date=2021, end_date=nil
 

Обновите запись

 record: start_date=2022, end_date=2023
version1: start_date=2021, end_date=2022
 

Обновите запись

 record: start_date=2024, end_date=2037
version2: start_date=2022, end_date=2024
version1: start_date=2021, end_date=2022
 

рельсы 6.1, paper_trail 12

Ответ №1:

Я бы предложил сохранить поведение Papertrail как есть, то есть оно будет отслеживать изменения значений для каждого поля без какой-либо дополнительной пользовательской логики, которая перезаписывала бы значения, тем самым нарушая интерфейс для отката к версии и т. Д.

Вместо этого я бы использовал meta для хранения и извлечения любых пользовательских данных, необходимых для модели https://github.com/paper-trail-gem/paper_trail#4c-storing-metadata

Комментарии:

1. Спасибо, мета была полезна. Все, что мне нужно сделать, это заменить неверные данные после reify