2011-01-09 19 views
14

Ich ziehe einige Daten von einer externen API und möchte die Ergebnisse lokal zwischenspeichern. Ich habe eine class SearchTerm, die ich mit einigen verschiedenen ActiveRecord-Typen durch die Tabelle searchable_items zugeordnet werden möchte. Ich bin mir ziemlich sicher, dass ich die Tische richtig eingerichtet habe, aber etwas in meinen Assoziationen muss falsch sein.Rails polymorph has_many: durch

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 

Ich würde erwarten, dass so etwas wie SearchTerm.find_by_term('SearchTerm').searchables zu tun, aber (und es wäre ein Array von Foo und Bar Objekte zurückgeben), erhalte ich die Fehler Could not find the association :searchable_items in model SearchTerm

Vielen Dank im Voraus für jede Einsicht Sie kann mir liefern!

Antwort

11

Sie benötigen has_many :searchable_items Verein Foo, Bar und SearchTerm Modelle hinzugefügt werden, da :through => :searchable_items Option zu diesem Verband verweist.

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

+5

Leider Zugabe was Sie vorgeschlagen gibt's keinen has_many hat: durch Assoziation ‚Suchbegriff # prüft mit‘ auf das polymorphe Objekt ‚durchsuchbare # searchable'.' – lyricat

+8

ähnlichen Setup hier: http: // Stackoverflow. com/questions/1683265/activerecord-hat-viel-durch-und-polymorphe associations – Heikki

+3

Wie die Fehlermeldung sagt, können Sie nicht viele durch Zuordnung auf polymorpic-Objekt haben. Sie könnten separate haben viele throughs für 'Foo' und' Bar' wie in der verknüpften Frage oben. – Heikki