我有一个 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(',') + "]"