Ruby / Rails if / else case语句

时间:2013-02-04 23:51:39

标签: ruby

我在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

1 个答案:

答案 0 :(得分:2)

我认为这就是你想要的。关键是检查nil,使用@ response.nil?另一个问题是,如果第一次失败,你会得到相同的网址 - 不知道为什么你会再次要求相同的网址,如果它第一次失败就会以不同的方式对待它。

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