Ruby on Rails - 为多个模型渲染JSON

fre*_*est 65 json ruby-on-rails render ruby-on-rails-3

我试图在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
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激,谢谢.

Rya*_*ner 92

您可以这样做的一种方法是使用要渲染的对象创建哈希,然后将其传递给render方法.像这样:

respond_to do |format|
  format.json  { render :json => {:moulding => @moulding, 
                                  :material_costs => @material_costs }}
end
Run Code Online (Sandbox Code Playgroud)

如果模型没有通过活动记录关联,那可能是您的最佳解决方案.

如果存在关联,则可以将:include参数传递给render调用,如下所示:

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

请注意,@material_costs如果采用这种方法,您不必在上面的部分中检索变量,Rails会自动从@moulding变量中加载它.


iai*_*ain 9

控制器只能返回一个响应.如果要将所有这些对象发回,则必须将它们放在一个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
Run Code Online (Sandbox Code Playgroud)