我有一个sinatra服务将json数组对象返回到我的rails应用程序。对象都是不同的类型。我正在尝试将: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"}]
有没有办法可以将assets数组转换为json而不对该数组中的每个对象执行此操作?或者其他一些方式来回报我想要的东西?感谢。
一位同事建议的解决方案似乎有效,但有点hacky。返回值可能是(因为to_json实际上只是创建一个字符串):
"[" + assets.join(',') + "]"
答案 0 :(得分:0)
快速解决方案:不要返回assets
,而是assets.to_json
。 (对此的理想解决方案是不要为每个资产调用to_json
,但最后只调用一次。)
旁注:请不要说to_json
“真的只是创建一个字符串”。如果这很容易,我们就不需要json
宝石。