rest-client в ruby ​​on rails - множественный запрос

Я пытаюсь создать веб-API на рубине на рельсах, я использую гем отдыха-клиента. Я пробовал этот код, чтобы получить ответ от нескольких URL-адресов и отобразить ответы вместе.

 def index
   url =  (['http://example1','https://example2'])
   url.split(",")
   i = 0
  url.each do |i|
       render json: JSON.parse(RestClient::Request.execute( method: :get, url: url[i])), layout: nil
       end
    end
 end

но я получаю сообщение об ошибке "no implicit conversion of String into Integer"


person Joel    schedule 05.08.2015    source источник
comment
Я думаю о более простом подходе. Если вы определяете ответ как пустой массив, например: response = [ ], а URL-адрес будет таким: urls = ['http://example1. Затем, если вы сделаете: urls.each do |url| ответ ‹‹ RestClient.get(url) end. у вас уже есть ответы вместе, верно? После этого вы можете делать с ним что хотите.   -  person LiveNL    schedule 06.08.2015
comment
у вас там много ошибок. если вы скажете url.each do |i|, то на каждой итерации цикла each ваша переменная i будет строкой URL-адреса 'http://example1 и т. д., а не целым числом, как вы ожидаете. во-вторых, вы не можете вызывать render несколько раз в контроллере. это выдаст ошибку. вам нужно сделать два запроса, затем объединить их, как вам нравится, а затем отобразить один ответ json.   -  person kdavh    schedule 06.08.2015
comment
Спасибо, я сделал: urls = Base64.decode64(params[:urls]).split(',') response=[] urls.each do |url| результат = JSON.parse(RestClient::Request.execute(метод::get, url: url)) response.push результат end render json: response, layout: nil end   -  person Joel    schedule 06.08.2015


Ответы (1)


Ошибка исходит из этой строки, а не url[i], используйте только i, так как i — это URL-адрес, к которому вы пытаетесь получить доступ, например, для обработки неявного преобразования:

render json: JSON.parse(RestClient::Request.execute( method: :get, url: i)), layout: nil

Но основная проблема заключается в многократном рендеринге, это можно решить, сначала получив необходимые данные, а затем один раз в конце отрендерив массив.

Вот так:

def index
   url_list = ['http://example1','https://example2']
   responses = []
   url_list.each do |url|
       responses << JSON.parse(RestClient::Request.execute( method: :get, url: url))
   end
   render json: responses, layout: nil
end
person Luke Exton    schedule 05.08.2015
comment
Спасибо, но это не сработало, потому что нет возможности сделать более 1 рендера, я сделал как описано выше. Спасибо, в любом случае! - person Joel; 06.08.2015
comment
Отредактированный ответ выше должен решить эту проблему. - person Luke Exton; 07.08.2015