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

我的列表视图渲染工作正常,但是当我想做一个显示视图时,有两个对象,并且显示包含不会呈现正确的 JSON。它引用了对象中的所有内容,包括...

JSON 输出如下所示:

显示 => "{"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 回答