'id, cost, width' ) -6ren">
gpt4 book ai didi

javascript - Ruby on Rails - 渲染 JSON

转载 作者:搜寻专家 更新时间:2023-11-01 04:27:41 24 4
gpt4 key购买 nike

我有以下 Controller :

@moulding = Moulding.find( params[:id].split(","), :select => 'id, cost, width' )
@mount = MaterialCost.find(1).cost_per_square_mm
@glass = MaterialCost.find(2).cost_per_square_mm
@backing_board = MaterialCost.find(3).cost_per_square_mm
@vat = AppOption.find( 1, :select => 'value' )
@wastage = AppOption.find( 2, :select => 'value' )
@markup = AppOption.find( 3, :select => 'value' )

respond_to do |format|
format.json { render :json => { :moulding => @moulding, :mount => @mount, :glass => @glass, :backing_board => @backing_board, :vat => @vat, :wastage => @wastage, :markup => @markup } }
end

JSON输出如下:

{"moulding":[{"moulding":{"cost":"3.1","id":2,"width":45}},{"moulding":{"cost":"1.5","id":4,"width":30}},{"moulding":{"cost":"2.1","id":6,"width":50}}],"mount":"0.00000246494303242769","glass":"0.0000032426589803639","backing_board":"0.00000135110790848496","vat":{"app_option":{"value":"17.5"}},"wastage":{"app_option":{"value":"20"}},"markup":{"app_option":{"value":"3"}}}

我希望 JSON 采用以下格式:

{"mouldings":[{"2":{"cost":"3.1","width":45}},{"4":{"cost":"1.5","width":30}},{"6":{"cost":"2.1","width":50}}],"mount":"0.00000246494303242769","glass":"0.0000032426589803639","backing_board":"0.00000135110790848496","vat":{"app_option":{"value":"17.5"}},"wastage":{"app_option":{"value":"20"}},"markup":{"app_option":{"value":"3"}}}

我想这样做的原因是我可以通过 id 从 JSON 字符串中提取特定 molding 的数据。如何重新格式化呈现的 JSON?

最佳答案

在我最初的回答中,我错误地假设@moulding 是单个对象,而实际上它是一组对象。在那种情况下,答案会奏效。要对造型做您想要的事情,您将必须重新包装这组对象。看起来像这样:

@moulding.collect! do |moulding|
{ moulding.id => {:cost=>moulding.cost, :width=>moulding.width}}
end

respond_to do |format|
format.json { render :json => { :moulding => @moulding, :mount => @mount, :glass => @glass, :backing_board => @backing_board, :vat => @vat, :wastage => @wastage, :markup => @markup } }
end

collect 方法将遍历您拥有的模具集中的所有项目,并将返回值放入一个新的数组中。 collect! 方法就地执行此操作(修改您正在处理的数组)。如果您想将它分配给一个新变量,那很好。

本质上,我将成型对象变成了哈希集。最终输出将如您所愿。


旧答案:

看来您想要做的是将代码中的 :moulding 键更改为项目 ID。示例:

format.json { render :json => { @moulding.id => @moulding, :mount => @mount, :glass => @glass, :backing_board => @backing_board, :vat => @vat, :wastage => @wastage, :markup => @markup } }

我不确定如何将 ID 从脑海中抹去,但重复 ID 应该不会有任何伤害。

注意:成型键名称使用 @ 前缀,而不是之前的符号。这是一个非常微妙且容易被忽视的细节。

关于javascript - Ruby on Rails - 渲染 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4378483/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com