Я использую камень paper_trail-association_tracking для сохранения версий PaperTrail для ассоциаций AR. У меня есть модель, назовем ее «Пользователь», в которой много групп и много навыков. Обе эти ассоциации имеют таблицы соединений (user_groups
и user_skills
). Так что моя модель User имеет две has_many :through
ассоциации. На всех моделях (User, Group, Skill, UserSkill, UserGroup) включена функция PaperTrail.
class User < ApplicationRecord
has_paper_trail
has_many :groups, through: user_groups
has_many :user_groups
has_many :skills, through: user_skills
has_many :user_skills
end
Скажите, что я хочу reify
более раннюю версию модели User вместе с их навыками (user_skills
записей), но не возвращаться к более ранней версии групп пользователей (user_groups
). Код выглядит примерно так:
me = User.find(1)
older_me = me.versions.last.reify(has_many: true)
older_me.save
Это будет относиться как к UserGroups, так и к UserSkills для этого пользователя, но я хочу, чтобы он обновлял только UserSkills. Кажется, что жемчужина автоматически установит все ассоциации, основываясь на этом исходном коде 1016 *, который я просмотрел.
Так есть ли способ указать, какую ассоциацию я хочу получить? Или это не лучшие практики, чтобы сделать это? Для моего случая использования я не вижу проблемы с этим, если сам пользователь фактически не был удален или что-то в этом роде.
Извините, мои модели здесь звучат немного странно, я пытался использовать что-то общее и упрощенное, мойРеальный вариант использования и модели немного сложны, но этот вопрос демонстрирует суть моей проблемы.