Ruby on Rails – Rendu JSON pour plusieurs modèles

J’essaie de rendre les résultats de plusieurs modèles en JSON. Le code suivant dans mon contrôleur ne rend que le premier jeu de résultats:

def calculate_quote @moulding = Moulding.find(params[:id]) @material_costs = MaterialCost.all respond_to do |format| format.json { render :json => @moulding } format.json { render :json => @material_costs } end end 

Toute aide serait très appréciée, merci.

Pour ce faire, vous pouvez créer un hachage avec les objects à restituer, puis le transmettre à la méthode de rendu. Ainsi:

 respond_to do |format| format.json { render :json => {:moulding => @moulding, :material_costs => @material_costs }} end 

Si les modèles ne sont pas associés via un enregistrement actif, c’est probablement la meilleure solution.

Si une association existe, vous pouvez passer un argument :include à l’appel de rendu, comme ceci:

 respond_to do |format| format.json { render :json => @moulding.to_json(:include => [:material_costs])} end 

Notez que vous n’auriez pas à récupérer la variable @material_costs dans la section ci-dessus si vous prenez cette approche, Rails le chargera automatiquement à partir de la variable @moulding .

Un contrôleur ne peut renvoyer qu’une seule réponse. Si vous souhaitez renvoyer tous ces objects, vous devez les placer dans un object JSON.

Que diriez-vous:

 def calculate_quote @moulding = Moulding.find(params[:id]) @material_costs = MaterialCost.all response = { :moulding => @moulding, :material_costs => @material_costs } respond_to do |format| format.json { render :json => response } end end 

J’ai fait quelque chose comme

 respond_to do |format| format.html # show.html.erb format.json { render :json => {:cancer_type => @cancer_type, :cancer_symptoms => @cancer_symptoms }} 

voici le résultat

 {"cancer_type":{"created_at":"2011-12-31T06:06:30Z","desc":"dfgeg","id":2,"location":"ddd","name":"edddd","sex":"ddd","updated_at":"2011-12-31T06:06:30Z"},"cancer_symptoms":[]} 

Donc ça marche

Merci les gars