2012-04-15 8 views
12

Ich habe ein Modell namens List, dass has_many :entries. Wie üblich, Rails 3 für List diese Show-Methode erzeugtInclude has_many Ergebnisse in REST JSON Ergebnis

def show 
    @list = List.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @list } 
    end 
end 

Wie kann ich format.json umfassen die entries Ergebnisse von @list in der JSON-Antwort als auch ändern?

Ich weiß, ich könnte @list zu einem Hash konvertieren, fügen Sie den Hash-Wert von .entries zu diesem, dann rendern den Hash, aber ich vermute, dass Rails hat einen eleganter Trick in seinem Ärmel.

+1

'@liste = List.Find (params [: id]). Schließt sich (: Einträge)' –

Antwort

21

Ja, es gibt eine :include Option, die Sie to_json geben kann:

format.json { render json: @list.to_json(:include => :entries) } 
+2

Dies funktioniert auch mit mehreren Modellen , zB: '@ list.to_json (: include => [: entries,: owner])' und vielleicht möchten Sie auch Ihre erste SQL-Abfrage optimieren, indem Sie auch dort include verwenden, zB: '@list = List.includes ([: entries,: owners]). find (params [: id]) ' – AJP

+1

Es wäre besser, wenn Sie' as_json' verwenden, so dass die Antwort nicht gegliedert wird. –