Как исправить версии на 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 название компании и названия компаний будет указано в последней версии?
Ответы
Ответ 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 для получения подробной информации о том, как это работает.