In einer Rails-Anwendung Ich habe zwei Modelle abzurufen, die über has_many
und belongs_to
Assoziationen verbunden sind:Wie alle zugehörigen Objekte aus einer vorhandenen Auswahlsatz in Rails
class Entity < ActiveRecord::Base
has_many :applicants
end
class Applicant < ActiveRecord::Base
belongs_to :entity
end
ich SearchKick bin mit ein paar Einheiten wählen Sie zuerst - Die Details dazu sind nicht wirklich wichtig, aber gegeben eine Sammlung von Entity-Objekten, wie kann ich alle verwandten Applicant Objekte abrufen?
# select some entities (in my app I'm using SearchKick to run the search)
entities = Entity.search params[:query]
# now find the applicants related to the selected entities
applicants = entities.???
Dies funktioniert, aber sehr langsam eine große Auswahl gegeben:
# retrieve the applicants related to the selected entities
applicants = []
entities.each do |entity|
applicants += entity.applicants
end
Gibt es die Bewerber Kurz Hand eine Rails zum Abrufen der ausgewählten Elemente im Zusammenhang? Ich
Andere Dinge haben versucht:
entities.class => Entity::ActiveRecord_Relation
entities.applicants => #error
entities.applicant_ids => #error
Danke, ich wusste nicht über '.joins'. Ihr Code funktioniert - aber ich habe mein Codebeispiel vereinfacht, um es reproduzierbar zu machen. In meiner App verwende ich SearchKick so 'entities = Entity.search params [: query]', wo die Abfrage kompliziert sein kann. Ist es möglich, Ihre Antwort so zu modifizieren, dass Sie einen vorhandenen Satz von Merkmalen in 'entities' verwenden (anstatt die' where'-Klausel einzuschließen)? –
Ich bin nicht vertraut mit searchKick, ich habe nur mit elasticsearch herumgespielt, es sieht so aus, als müsste man die Assoziation eifrig laden und die 'search_data' wie [this] definieren (http://stackoverflow.com/a/21383143/1301840), es ist ein bisschen verwirrend für mich, dass Sie "Bewerber" mit den "Entitäten" finden möchten, dann sollte die Suche auf "Antragsteller" Seite mit der Assoziation sein – lusketeer
yeah Sie könnten mit der Suche auf Bewerber stattdessen Recht haben. Die Entitäten haben jedoch die Attribute, nach denen ich suchen muss (in diesem Fall lat/long). Vielleicht muss ich die Modelle und Beziehungen umgestalten, um dies zu unterstützen. Danke für die bisherigen Tipps. –