#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