Подтвердить что ты не робот

Ruby on Rails - Render JSON для нескольких моделей

Я пытаюсь отобразить результаты более чем одной модели в JSON. Следующий код в моем контроллере отображает только первый набор результатов:

  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

Любая помощь будет очень благодарна, спасибо.

4b9b3361

Ответ 1

Один из способов сделать это - создать хэш с объектами, которые вы хотите визуализировать, а затем передать это методу рендеринга. Например:

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

Если модели не связаны активной записью, возможно, это лучшее решение.

Если существует ассоциация, вы можете передать аргумент :include вызову рендеринга, например:

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

Обратите внимание, что вам не нужно будет извлекать переменную @material_costs в приведенном выше разделе, если вы примете этот подход, Rails автоматически загрузит его из переменной @moulding.

Ответ 2

Контроллер может возвращать только один ответ. Если вы хотите отправить все эти объекты обратно, вы должны поместить их в один объект JSON.

Как насчет:

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

Ответ 3

Я сделал что-то вроде

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

вот результат

{"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":[]}

Итак, он работает

Спасибо, ребята,