Ruby on rails 在Ruby/Rails中将对象列表呈现为JSON的更简单方法

Ruby on rails 在Ruby/Rails中将对象列表呈现为JSON的更简单方法,ruby-on-rails,ruby,json,list,Ruby On Rails,Ruby,Json,List,我想将对象列表呈现为JSON,但我不想让用户使用JSON,因为我想呈现非常特定的格式和信息子集 这是我的观点(foo.json.erb): { “id”:, “进展”:[ 奖励, :user=>@user%>,, @最后, :user=>@user%> ] } 正如您所看到的,它非常难看,因为我必须单独呈现@rewards_中的最后一项,以便在条目后面没有逗号(以使JSON有效) 必须有更好的方法来做到这一点,我只是对Ruby有点陌生。有人能给我指出正确的方向吗?尝试不同的模板系统,如或。尝试

我想将对象列表呈现为JSON,但我不想让用户使用JSON,因为我想呈现非常特定的格式和信息子集

这是我的观点(
foo.json.erb
):

{
“id”:,
“进展”:[
奖励,
:user=>@user%>,,
@最后,
:user=>@user%>
]
}
正如您所看到的,它非常难看,因为我必须单独呈现@rewards_中的最后一项,以便在条目后面没有逗号(以使JSON有效)


必须有更好的方法来做到这一点,我只是对Ruby有点陌生。有人能给我指出正确的方向吗?

尝试不同的模板系统,如或。

尝试不同的模板系统,如或。

如果您不需要增量渲染,那么您可以简单地构建一个嵌套的哈希/数组Ruby数据结构,并调用
\u json
。您还可以使用符号作为键,它们将成为结果JSON中的字符串键

假设您确实需要增量渲染,那么这可能是您可以做的一个小改进(或者可能只是用另一种替换一种丑陋)。如果将
@rewards\u点击的
转换为
[0..-2]
的数组非常慢,那么这可能会更快

{
"id" : <%= @user.id %>,
"progress" : [
    <% @rewards_tapped.each_with_index do |reward, idx|
    %><%= idx == 0 ? '' : ',' %>
    <%= render "rewardprogress", :reward => reward, 
                                     :user => @user
    %><% end %>
]
}
{
“id”:,
“进展”:[
奖励,
:user=>@user
%>
]
}

如果您不需要增量呈现,那么您可以简单地构建一个嵌套的哈希/数组Ruby数据结构,并调用
\u json
。您还可以使用符号作为键,它们将成为结果JSON中的字符串键

假设您确实需要增量渲染,那么这可能是您可以做的一个小改进(或者可能只是用另一种替换一种丑陋)。如果将
@rewards\u点击的
转换为
[0..-2]
的数组非常慢,那么这可能会更快

{
"id" : <%= @user.id %>,
"progress" : [
    <% @rewards_tapped.each_with_index do |reward, idx|
    %><%= idx == 0 ? '' : ',' %>
    <%= render "rewardprogress", :reward => reward, 
                                     :user => @user
    %><% end %>
]
}
{
“id”:,
“进展”:[
奖励,
:user=>@user
%>
]
}

um。。为什么这里需要解析器?它不是解析器,而是模板系统。嗯。。为什么这里需要解析器?它不是解析器,它是一个模板系统。在某种程度上,这更干净。至少是干的。谢谢你的回答!在某种程度上,这更干净。至少是干的。谢谢你的回答!