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 cela, vous pouvez créer un hachage avec les objets que vous souhaitez rendre, puis les 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 votre meilleure solution.
Si une association existe, vous pouvez passer un :include
argument à 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 le @material_costs
variable dans la section ci-dessus si vous adoptez cette approche, Rails le chargera automatiquement à partir du @moulding
variable.
Un contrôleur ne peut renvoyer qu'une seule réponse. Si vous souhaitez renvoyer tous ces objets, vous devez les placer dans un seul objet 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