2011-01-09 24 views
14

Sto prelevando alcuni dati da un'API esterna e desidero memorizzare i risultati localmente in cache. Ho un class SearchTerm, che vorrei essere associato a diversi tipi di ActiveRecord tramite la tabella searchable_items. Sono abbastanza sicuro di avere le tabelle configurate correttamente, ma qualcosa nelle mie associazioni deve essere sbagliato.Rails polymorphic has_many: through

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 

mi sarei aspettato di essere in grado di fare qualcosa di simile SearchTerm.find_by_term('SearchTerm').searchables (e sarebbe restituire un array di Foo e Bar oggetti), tuttavia, ottengo l'errore Could not find the association :searchable_items in model SearchTerm

Grazie in anticipo per qualsiasi comprensione voi può fornirmi!

risposta

11

è necessario aggiungere has_many :searchable_items associazione ai modelli Foo, Bar e SearchTerm perché :through => :searchable_items opzione si riferisce a tale associazione.

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

+5

Purtroppo, l'aggiunta di quello che hai suggerito dà 'non può avere un has_many: attraverso l'associazione 'searchterm # verificare l'' sull'oggetto polimorfica 'ricercabile # searchable'.' – lyricat

+8

configurazione simile qui: http: // StackOverflow. it/questions/1683265/activerecord-has-many-through-and-polymorphic-associations – Heikki

+3

Come il messaggio di errore dice, non è possibile avere più associazioni attraverso l'oggetto polimorfico. Si potrebbe avere separato ha molti passaggi per 'Foo' e' Bar' come nella domanda collegata sopra. – Heikki

Problemi correlati