Ruby on Rails – 为多个模型渲染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 

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

你可以这样做的一种方法是创build一个哈希与你想渲染的对象,然后将其传递给渲染方法。 像这样:

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

如果模型没有通过活动logging关联,那可能是您最好的解决scheme。

如果关联存在,则可以将:includeparameter passing给render调用,如下所示:

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

请注意,如果采取这种方法,您将不必在上面的部分中检索@material_costsvariables,Rails将自动从@mouldingvariables中加载该variables。

控制器只能返回一个响应。 如果你想发回所有这些对象,你必须把它们放在一个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 

我做了类似的事情

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

所以它正在工作

感谢你们