2010-01-21 7 views
5

Ich habe eine Beziehung, in der ein Beitrag zur Stadt gehört, die zu einem Staat gehört inturn wie:Fetching zweite Ebene Modell mit Schienen aktiven Datensatz

class Post < ActiveRecord::Base 
    belongs_to :city 
end 
class City < ActiveRecord::Base 
    belongs_to :state 
end 

Jetzt möchte ich mit zusammen alle Beiträge finden, die ihre Städte und die Staaten, zu denen die gehören. Ich schrieb die folgende Abfrage, um die Posts mit ihren Städten zu holen, aber aus Ideen heraus, wie man den entsprechenden Zustand mit der Stadt im gleichen Finder holt:

@post = Post.find: alle,: include => [: Stadt]

Jede Hilfe wird geschätzt.

Danke.

Antwort

9
Post.all(:include => { :city => :state }) 
4

Schienen werden dies für Sie behandeln, dank der belongs_to Beziehung wird diese Information automatisch abgerufen.

@posts = Post.find(:all) 

@posts enthält jetzt die Logik die city und city.state Details für alle Erträge Beiträge zu holen.

Wenn Sie alle zu Einsatz planen diese Details Sie sollten sie eifrig Last, mit :include => { :city => :state } als Farrel und mckeed angegeben.

Hinweis:, um es um die andere Art und Weise arbeiten (und es ist auch gut Modell definieren Verhalten soll) sollten Sie die has_many oder has_one Verein als auch hinzufügen. Siehe die Association Basics Guide.

+0

Wie Ihr Link erklärt, wenn Sie auf alle zugehörigen Datensätze zugreifen möchten, sollten Sie sie mit ': include' wie in Farrels Antwort laden. Sonst, wenn Sie "@ Beiträge" durchlaufen, wird jedes Mal, wenn Sie nach der Stadt oder dem Status des Beitrags fragen, ein anderer Datenbank-Abruf durchgeführt, was zu viel langsameren Code führt. – mckeed

+0

Sie haben völlig Recht, danke für das Aufzeigen. Ich habe die Antwort mit diesen Informationen aktualisiert. – Veger

Verwandte Themen