1

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

1 回答 1

0

快速解决方案:不要返回assets,但是assets.to_json。(一个理想的解决方案是不调用to_json每个资产,而只在最后调用一次。)

旁注:请不要说那to_json是“真的只是创建一个字符串”。如果这么简单,我们就不需要json宝石了。

于 2013-03-15T09:40:26.530 回答