Подтвердить что ты не робот

Как исправить версии на has_many/принадлежит к ассоциации с paper_trail

Я использую paper_trail в рельсах для отслеживания версий моих моделей. Но документация по репозиторию github указывает, что самоцвет не поддерживает ассоциации has_many, belongs_to.

Скажем, у меня есть приложение, которое записывает имена цепей некоторых компанов:

class Company < ActiveRecord::Base
  has_many :ceos
  has_paper_trail
end

class Ceo < ActiveRecord::Base
  belongs_to :companies
  has_paper_trail
end

Приведенный выше пример представляет информацию ABC Inc.

company.name => "ABC"
company.ceo.past => "John Henry"
company.ceo.present =>  "Amy Warren"

Как я могу реализовать следующую операцию, так что reset название компании и названия компаний будет указано в последней версии?

4b9b3361

Ответ 1

Вы можете попытаться перемоделировать ассоциацию, чтобы удалить has_many, потому что в случае с руководителями компания может иметь несколько руководителей-исполнителей в течение своей жизни, но в течение определенного периода она имеет только исполнительный директор.

Реализация этого может быть has_one для таблицы соединений, состоящей из идентификатора как CEO, так и компании, и периодов времени, в которых это было действительно.

Благоприятный побочный эффект: тривиально было бы, чтобы человек был генеральным директором компании 2 раза с другим генеральным директором между ними и имел легкий обход этого домена.

Ответ 2

Инструкции по его обработке можно найти в README: https://github.com/airblade/paper_trail/blob/master/README.md#associations

В принципе нужно будет создать таблицу version_associations либо во время установки с опцией rails generate paper_trail:install --with-associations, либо вручную для этого.

Я предлагаю вам прочитать полную документацию по Github для получения подробной информации о том, как это работает.