with render_to_string rails from ruby-on-rails json ruby-on-rails-3 render

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 .