オブジェクトの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(',') + "]"