1

オブジェクトのjson配列をRailsアプリに返すsinatraサービスがあります。オブジェクトはすべて異なるタイプです。:methods オプションを to_json 呼び出しに渡そうとしていますが、オブジェクトごとに異なるメソッドを呼び出す必要があります。json オブジェクトの配列を返しているため、以下のコードは機能しません。

params = {:assets => {'1' => {:asset_type => "file", :urls => [:original]},
                      '2' => {:asset_type => "image", :urls => [:original, :thumbnail]}
                     }
         }

get 'url' do
  assets = []

  params[:assets].each do |asset_id,asset_params|
    asset = Asset.find asset_id
    methods = asset_params[:urls]
    asset_json = asset.to_json :methods => methods
    assets << asset_json
  end
  assets
end

#expected output:

[{"id" => 1, "type" => "file", "original" => "/filesystem/asset/1/filename.txt"}, {"id" => 2, "type => "image", "original" => "/filesystem/asset/2/image.jpg", "thumbnail" => "/filesystem/asset/2/image_thumb.jpg"}]

その配列内の各オブジェクトに対してそうすることなく、アセット配列をjsonに変換する方法はありますか? または、私が欲しいものを返す他の方法はありますか? ありがとう。

同僚が提案した解決策はうまくいくようですが、少しハックです。戻り値は次のようになります (to_json は実際には文字列を作成しているだけなので):

"[" + assets.join(',') + "]" 
4

1 に答える 1

0

簡単な解決策: を返さないassetsでくださいassets.to_json。(これに対する理想的な解決策はto_json、各アセットを呼び出すのではなく、最後に 1 回だけ呼び出すことです。)

to_json余談ですが、「本当に文字列を作成しているだけ」とは決して言わないでください。そんなに簡単なら、jsongem は必要ありません。

于 2013-03-15T09:40:26.530 に答える