-1

lib メソッドに次の if else ステートメントがあります。

begin
    url                  = URI.parse("url"+ product )
    @response            = JSON.parse(Net::HTTP.get_response(url).body)
    url2                 = URI.parse("url" + product)
    @response1           = JSON.parse(Net::HTTP.get_response(url2).body)

    if @response != nil
        @url                 = @response["product"]["url"]
        image_url1           = @response["product"]["image_url"]
        @title               = @response["product"]["title"] 

    else
        @url                 = @response1["ProductUrl"]
        @image_url           = @response1["ImagePath"]  
        @title               = @response1["ProductName"]
    end
  rescue 
     next 
end

現在、このメソッドは url と @response のみをチェックしており、@response = nil の場合は単純にスキップしています。@response が nil かどうかを確認するにはどうすればよいですか。もしそうなら、url2 と @response1 を使用して、その応答から返された変数を保存します。@response が nil でない場合、@respoonse から返された変数を保存します。

@response と @response1 は異なる API です

4

1 に答える 1

2

これがあなたの望むものだと思います。重要なのは、nilをチェックするには、@ response.nil?を使用することです。もう1つの問題は、最初に失敗した場合に同じURLを取得することです。同じURLを再度要求し、最初に失敗した場合は別の方法で処理する理由がわかりません。

begin
  url = URI.parse("url+ product )
  @response = JSON.parse(Net::HTTP.get_response(url).body)

  if !@response.nil?
    @url = @response["product"]["walmart_canonical_url"]
    @image_url = @response["product"]["image_url"]
    @title = @response["product"]["title"] 
  else
    url = URI.parse("url" + product)
    @response = JSON.parse(Net::HTTP.get_response(url2).body)
    @url = @response["ProductUrl"]
    @image_url = @response["ImagePath"]  
    @title = @response["ProductName"]
  end

rescue
  next
end
于 2013-02-05T00:00:24.287 に答える