2012-06-23 39 views
0
User 
    first_name: "Johnny" 
    age: 15 

Car 
    name: "Mazda" 

Car 
    name: "BMW" 

我想結果看起來像複雜的有源紀錄協會

[ {"first_name": "Johnny", "age": 15, cars: [ { "name": "Mazda" }, { "name" : "BMW" } ] } ] 

是否有可能做到這一點在Rails的?到目前爲止,我可以通過輸入johnny.cars來獲得用戶汽車,但是我希望數據結構也能保存parent的值。

我很喜歡使用named_scopes和瞬態屬性的想法,但到目前爲止沒有運氣,任何想法/幫助非常感謝。

+0

你的汽車ans用戶'has_many'或'has_many:through'之間的模型關聯可能可以幫助我們也從服務器返回json輸出,那麼我想這個鏈接可以幫助'http://apidock.com/ rails/ActiveRecord/Serialization/to_json' – Viren

+0

我使用多對多(有很多通過),但我想循環所有的用戶,同時顯示他們所有的汽車。 – lemon

+0

所以什麼阻止你然後沒有你嘗試:包括=>:汽車時提取所有用戶這樣的東西'User.includes(:cars)' – Viren

回答

2

,你可以使用:includes聲明

includes是神奇的語法實際上檢索其它表中的所有記錄在哪裏,你可以貪婪加載所有assocaited創下的記錄。

例子在你的情況

用戶的has_many汽車

,所以如果你

@users = User.includes(:cars)

現在,這將加載所有的用戶記錄,並會eagerload所有的汽車記錄每個用戶對象

所以,如果你循環用戶對象和做

<% @users.each do |user| %> 
    <%= user.cars %> 
<%end%> 

user.cars不會解僱一個單獨的查詢來獲取所有汽車的用戶,而不是將使用includes條款

獲取這些記錄急於加載該技術被廣泛使用,以避免N+1查詢問題

谷歌爲N+1知道更多關於它

希望這會幫助