web-dev-qa-db-ja.com

Railsポリモーフィックhas_many:through

外部APIからデータを取得していて、結果をローカルにキャッシュしたいと思います。 _class SearchTerm_があり、テーブル_searchable_items_を介していくつかの異なるActiveRecordタイプに関連付けたいと思います。テーブルが正しく設定されていることは確かですが、関連付けの何かが間違っている必要があります。

_class Foo < ActiveRecord::Base
  has_many :search_terms, :as => :searchable, :through => :searchable_items
end

class Bar < ActiveRecord::Base
  has_many :search_terms, :as => :searchable, :through => :searchable_items
end

class SearchTerm < ActiveRecord::Base
  has_many :searchables, :through => :searchable_items
end

class SearchableItem < ActiveRecord::Base
  belongs_to :search_term
  belongs_to :searchable, :polymorphic => true
end
_

SearchTerm.find_by_term('SearchTerm').searchablesのようなことができると期待します(そしてFooオブジェクトとBarオブジェクトの配列を返します)が、エラー_Could not find the association :searchable_items in model SearchTerm_が発生します

あなたが私に提供できる洞察を事前に感謝します!

15
lyricat

has_many :searchable_itemsオプションはその関連付けを参照するため、FooBar、およびSearchTermモデルに:through => :searchable_items関連付けを追加する必要があります。

http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association

11
Heikki