2010-01-21 123 views
5

我在其中一個專屬於哪個inturn屬於國家像城裏的關係:的讀取與軌道的活動記錄第二級模型

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

現在我想找到沿着所有職位的他們城市和屬於的國家。我寫了下面的查詢來獲取與他們的城市的帖子,但沒有想法如何取得在同一個發現者與城市的相應狀態:

@post = Post.find:all,:include => [:城市]

任何幫助表示讚賞。

謝謝。

回答

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

Rails將爲您處理此問題,這要歸功於belongs_to關係,此信息會自動提取。

@posts = Post.find(:all) 

@posts現在包含邏輯爲所有回報的職位取citycity.state細節。

如果你打算使用所有這些細節你應該貪婪加載他們,:include => { :city => :state }Farrel和mckeed說明。

注:使它工作的其他方式(它也應該很好的模式定義的行爲),你應該添加has_manyhas_one協會爲好。請參閱Association Basics Guide

+0

正如你的鏈接所解釋的,如果你打算訪問所有相關的記錄,你應該像Farrel的回答那樣用':include'來加載它們。否則,當你循環訪問'@ posts'時,每次你詢問帖子的城市或州時,它都會執行另一次數據庫提取,導致代碼更慢。 – mckeed

+0

你完全正確,謝謝指出。我已經用這些信息更新了答案。 – Veger