Ruby on rails JSON未嵌套在rails视图中

Ruby on rails JSON未嵌套在rails视图中,ruby-on-rails,json,Ruby On Rails,Json,我在继承权中有几个模型,1:每个级别都有很多。每个类仅与上面的类和下面的类关联,即: L1课程, 二级单位, L3单元布局, L4布局字段, L5表格字段(不是代码,而是布局字段的同级) 我试图构建整个层次结构的JSON响应 def show @course = Course.find(params[:id]) respond_to do |format| format.html # show.html.erb format.json do

我在继承权中有几个模型,1:每个级别都有很多。每个类仅与上面的类和下面的类关联,即:

L1课程, 二级单位, L3单元布局, L4布局字段, L5表格字段(不是代码,而是布局字段的同级)

我试图构建整个层次结构的JSON响应

def show
    @course = Course.find(params[:id])
    respond_to do |format|
      format.html # show.html.erb
      format.json do
        @course = Course.find(params[:id])
        @units = @course.units.all
        @unit_layouts = UnitLayout.where(:unit_id => @units)
        @layout_fields = LayoutField.where(:unit_layout_id => @unit_layouts)
        response = {:course => @course, :units => @units, :unit_layouts => @unit_layouts, :layout_fields => @layout_fields}
        respond_to do |format|
          format.json {render :json => response }
        end
      end
    end
  end
代码将返回正确的值,但是单位、单位布局和布局字段都嵌套在课程下的同一级别。我希望它们嵌套在其父级中。

您需要与
一起使用:include
以包含相关记录

这里有一个尝试:

@course = Course.find(params[:id])

respond_to do |format|
  format.html # show.html.erb
  format.json do
    render :json => @course.to_json(:include => { :units => { :include => :layouts } })
  end
end

这可能不是100%正确,因为您没有包括所有关联的名称,但我假设
Unit
有许多
布局。要包含更深层次的嵌套,请添加其他嵌套的
:包含
s.

这是因为您在顶层使用每个集合构建它们。这就是
response={:course=>@course,:units=>@units,:unit\u layouts=>@unit\u layouts,:layout\u fields=>@layout\u fields}
行所做的。您也不应该嵌套两个
response\u到
块中。您也不应该在
格式:json
块中重新找到课程。你已经在上面找到了它,你只需要一行
@course=course.find(params[:id])
就可以了。嗨,米加,这正是我要找的。非常感谢您的时间和多个帖子。它工作得很好。