0

オブジェクトのリストを JSON にレンダリングしたいのですが、非常に具体的な形式と情報のサブセットをレンダリングしたいので、to_json を使用したくありません。

これが私の見解です ( foo.json.erb):

{
"id" : <%= @user.id %>,
"progress" : [
    <% @rewards_tapped[0..-2].each do |reward| %>
        <%= render "rewardprogress", :reward => reward, 
                                     :user => @user %>,
    <% end %>
    <%= render "rewardprogress", :reward => @rewards_tapped.last, 
                                 :user => @user %>
]
}

ご覧のとおり、@rewards_tapped の最後のアイテムを個別にレンダリングして、エントリの後にカンマがないようにする必要があるため (有効な JSON を作成するため)、かなり醜いです。

これを行うためのより良い方法が必要です。私はRubyに少し慣れていません。誰かが私を正しい方向に向けることができますか?

4

2 に答える 2

2

rabljbuilderなどの別のテンプレート システムを試してください。

于 2012-07-25T05:49:47.267 に答える
1

インクリメンタル レンダリングが必要ない場合は、ネストされたハッシュ/配列 Ruby データ構造を構築し、それを呼び出す#to_jsonだけです。シンボルをキーとして使用することもできます。シンボルは結果の JSON で文字列キーになります。

インクリメンタル レンダリングが必要であると仮定すると、これはマイナーな改善である可能性があります (または、ある種類の醜いものを別のものに置き換えるだけかもしれません)。@rewards_tapped配列への変換[0..-2]がまったく遅い場合でも、これはより高速になる可能性があります。

{
"id" : <%= @user.id %>,
"progress" : [
    <% @rewards_tapped.each_with_index do |reward, idx|
    %><%= idx == 0 ? '' : ',' %>
    <%= render "rewardprogress", :reward => reward, 
                                     :user => @user
    %><% end %>
]
}
于 2012-07-25T06:18:49.227 に答える