22

モデルのバージョンを追跡するために、レールで paper_trail を使用しています。しかし、github リポジトリのドキュメントは、gem がhas_many,belongs_to関連付けをサポートしていないことを示しています。

いくつかの会社のCEOの名前を記録するアプリがあるとしましょう:

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"

次の操作を実装して、会社と会社の CEO 名を最後のバージョンにリセットするにはどうすればよいですか?

4

2 に答える 2

1

CEO の場合、会社はその生涯を通じて have_many の CEO を持っているかもしれませんが、特定の期間には 1 人の CEO しか持っていないため、関連付けを再モデル化して has_many を削除することを試みることができます。

これの実装は、CEO と会社の両方の ID と有効期間で構成される結合テーブルへの has_one である可能性があります。

有益な副作用として、ある人物が企業の CEO を 2 回務め、その間に別の CEO を務め、ドメイン内でその人物を簡単にたどることが簡単になるということです。

于 2014-02-01T11:28:56.163 に答える
0

これを処理する方法については、README に記載されています: https://github.com/airblade/paper_trail/blob/master/README.md#associations

version_associations基本的には、インストール時に rails generate paper_trail:install --with-associations オプションを使用するか、これを機能させるために手動でテーブルを作成する必要があり ます。

これがどのように機能するかの詳細については、Github の完全なドキュメントを読むことをお勧めします。

于 2015-04-23T05:54:46.200 に答える