Rails polymorphic has_many: через
Я извлекаю некоторые данные из внешнего API и хотел бы кэшировать результаты локально. У меня есть class SearchTerm
, который я хотел бы связать с несколькими различными типами ActiveRecord через таблицу searchable_items
. Я уверен, что таблицы правильно настроены, но что-то в моих ассоциациях должно быть неправильным.
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
Заранее благодарим за любое понимание, которое вы можете мне предоставить!
Ответы
Ответ 1
Вам нужно добавить ассоциацию has_many :searchable_items
к Foo
, Bar
и SearchTerm
, поскольку опция :through => :searchable_items
относится к этой ассоциации.
http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association