2011-01-09 12 views
14

Estoy extrayendo algunos datos de una API externa y me gustaría almacenar en caché los resultados a nivel local. Tengo un class SearchTerm, que me gustaría asociar con algunos tipos diferentes de ActiveRecord a través de la tabla searchable_items. Estoy bastante seguro de que tengo las tablas configuradas correctamente, pero algo en mis asociaciones debe estar mal.Rails polimórficos has_many: a través de

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 

que sería de esperar a ser capaz de hacer algo como SearchTerm.find_by_term('SearchTerm').searchables (y sería devolver una matriz de objetos Foo y Bar), sin embargo, me sale el error Could not find the association :searchable_items in model SearchTerm

Gracias de antemano por cualquier idea que puede proporcionarme!

Respuesta

11

es necesario agregar has_many :searchable_items asociación a Foo, Bar y SearchTerm modelos porque :through => :searchable_items opción hace referencia a esa asociación.

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

+5

Por desgracia, la adición de lo que usted sugiere da 'No se puede tener un has_many: a través de la asociación de searchTerm # Searchables 'en el objeto polimórfico 'investigable # searchable'.' – lyricat

+8

configuración similar aquí: http: // stackoverflow. com/questions/1683265/activerecord-have-many-through-and-polymorphic-associations – Heikki

+3

Al igual que el mensaje de error dice, no puede tener muchas asociaciones mediante el objeto polimórfico. Podrías haber separado muchas entradas para 'Foo' y' Bar', como en la pregunta vinculada anterior. – Heikki

Cuestiones relacionadas