0

各レベルで 1 対多の階層にいくつかのモデルがあります。各クラスは、その上のクラスとその下のクラスにのみ関連付けられます。つまり、次のようになります。

L1 コース、L2 ユニット、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

コードは正しい値を返しますが、units、unit_layouts、layout_fields はすべて同じレベルでネストされています。親の中に入れ子にしたいと思います。

4

1 に答える 1

1

関連するレコードを含めるにはto_jsonwithを使用する必要があります。: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% 正しいとは言えませんが、Unithas_manyであると想定していますLayouts。より深いネストを含めるには、ネストされた を追加し:includeます。

于 2012-10-25T22:58:01.690 に答える