2013-03-06 4 views
1

У меня есть сервис 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(',') + "]" 
+2

Не могли бы вы добавить пример массива 'params [: assets]' и ожидаемого вывода? – fmendez

ответ

0

Быстрое решение: Не возвращайте assets, но assets.to_json. (Идеальное решение для этого было бы связано не с вызовом to_json для каждого актива, а только один раз в конце.)

На стороне: Пожалуйста, никогда не говорите, что to_json «действительно просто создает строку». Если бы это было так просто, нам не понадобился бы камень json.

Смежные вопросы