Как исправить версии на has_many / принадлежит_ для ассоциации с paper_trail - PullRequest
21 голосов
/ 01 апреля 2012

Я использую 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"

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

Ответы [ 2 ]

1 голос
/ 01 февраля 2014

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

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

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

0 голосов
/ 23 апреля 2015

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

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

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

...