2
def list
    @rings = Ring.order("RAND()")
    #JSON RENDERING
    render :json => @rings.to_json(:include => [:variations, :stones]), :callback => params[:callback]
end

def show
    @showring = Ring.includes(:stones, :variations).find(params[:id])
    @other_rings = Ring.select([:id, :stone_count]).where(:style_number => @showring.style_number).reject{ |ring| ring == @showring}
    #JSON RENDERING
    render :json => {@showring.to_json(:include =>[:variations, :stones]), :other_rings => @other_rings}, :callback => params[:callback]
end

リスト ビューのレンダリングは正常に動作しますが、2 つのオブジェクトを使用してビューを表示したい場合、インクルードを使用して表示すると適切な JSON がレンダリングされません。オブジェクト内のすべてをインクルードで引用しています...

JSON 出力は次のようになります。

showring => "{"available":"yes","eng...9","stone_y":"149.4"}]}"

other_rings => 適切にレンダリングされたオブジェクト


別のメモとして、 @rings オブジェクトにインクルードを既に追加している場合、なぜ「to_json」メソッドに関連付けを追加する必要があるのですか?

4

2 に答える 2

10

あなたがするとき

render :json => {:show_ring => @showring.to_json(:include =>[:variations, :stones]), :other_rings => @other_rings}

Railsは@showringをjsonに変換しています(つまり、文字列表現を取得しています)。つまり、値は文字列リテラルです。代わりに

render :json => {:show_ring => @showring.as_json(:include =>[:variations, :stones]), :other_rings => @other_rings}

as_jsonオブジェクトをハッシュに変換するすべての作業を実行しますが、文字列に変換する最後のステップはありません

于 2012-09-04T14:46:27.813 に答える
1

より多くのJSONオブジェクトの構築により多くの時間を費やす場合は、rablと呼ばれるgemを調べる必要があります。これにより、JSONの構築が非常に簡単になり、カスタマイズに適しています。その後、APIの構築に適しています。

于 2012-09-05T16:30:13.543 に答える