У меня есть сервис sinatra, возвращающий массив json объектов в мое приложение rails. Все объекты разных типов. Я пытаюсь передать опцию: methods для вызова to_json, но для каждого объекта требуются разные методы, вызываемые на нем. Код ниже не работает, так как я возвращаю массив объектов json.Вызов to_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(',') + "]"
Не могли бы вы добавить пример массива 'params [: assets]' и ожидаемого вывода? – fmendez