0

私はいくつかの関連する質問を読み、以下のように has_many :through + polymorphic との関係を設定しようとしました。

class Item < ActiveRecord::Base
  has_many :authorships, :as => :target
  has_many :authors, :through => :authorships
end

class Author < ActiveRecord::Base
  has_many :authorships
  has_many :items, :through => :authorships, :source => :target, :source_type => 'Item'
end

class Authorship < ActiveRecord::Base
  belongs_to :author
  belongs_to :target, :polymorphic => true
end

「Authorship」の移行ファイルは次のとおりです。

create_table :authorships do |t|
  t.integer :author_id
  t.string :target_type
  t.integer :target_id
  t.timestamps
end

以下のようなデータを追加しました。

a = Authorship.new
a.target = @item
a.author = @author
a.save

データを確認すると、これは正常に機能します。

Author.first.items

これはnilを返しますが。

Item.first.authors

エラーが見つかりませんでした。私を助けてください!

4

1 に答える 1

0

次のように定義する必要があると思います。

has_many :items, :through => :authorships, :source => :item, :conditions => "authorships.target_type = 'Item'"
于 2012-03-27T10:19:13.587 に答える