Reify только один has_many: через ассоциацию с PaperTrail? - PullRequest
5 голосов
/ 22 октября 2019

Я использую камень 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 *, который я просмотрел.

Так есть ли способ указать, какую ассоциацию я хочу получить? Или это не лучшие практики, чтобы сделать это? Для моего случая использования я не вижу проблемы с этим, если сам пользователь фактически не был удален или что-то в этом роде.

Извините, мои модели здесь звучат немного странно, я пытался использовать что-то общее и упрощенное, мойРеальный вариант использования и модели немного сложны, но этот вопрос демонстрирует суть моей проблемы.

...