ruby-on-rails - render_to_string - render json rails
Ruby on Rails-Render JSON para mĂșltiples modelos (3)
Estoy tratando de presentar resultados de más de un modelo en JSON. El siguiente código en mi controlador solo representa el primer conjunto de resultados:
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
Cualquier ayuda sería muy apreciada, gracias.
Hice algo como
respond_to do |format|
format.html # show.html.erb
format.json { render :json => {:cancer_type => @cancer_type, :cancer_symptoms => @cancer_symptoms }}
aquí está el resultado
{"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":[]}
Entonces está funcionando
Gracias chicos
Un controlador solo puede devolver una respuesta. Si desea devolver todos estos objetos, debe colocarlos en un objeto JSON.
Qué tal si:
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
Una forma de hacerlo es crear un hash con los objetos que desea representar, y luego pasarlo al método de renderizado. Al igual que:
respond_to do |format|
format.json { render :json => {:moulding => @moulding,
:material_costs => @material_costs }}
end
Si los modelos no están asociados a través de un registro activo, esa es probablemente la mejor solución.
Si existe una asociación, puede pasar un argumento :include
a la llamada de renderizado, así:
respond_to do |format|
format.json { render :json => @moulding.to_json(:include => [:material_costs])}
end
Tenga en cuenta que no tendría que recuperar la variable @material_costs
en la sección anterior si toma este enfoque, Rails lo cargará automáticamente de la variable @moulding
.