代码失败,因为if语句中使用的变量为nil

时间:2013-08-22 09:39:09

标签: ruby

我有以下内容:

 def self.parse_categories
    categories = @data.css('#refinements ul').first

    if categories.css('li:nth-child(1) a span').text == "Pet Supplies"
      @categories_hash = {}
      categories_category = categories.css('li:nth-child(2) strong').text
      categories.css('li').drop(2).each do | categories |
        categories_title = categories.css('.refinementLink').text
        categories_count = categories.css('.narrowValue').text[/[\d,]+/].delete(",").to_i
        @categories_hash[:categories] ||= {}
        @categories_hash[:categories][categories_category] ||= {}
        @categories_hash[:categories][categories_category][categories_title] = categories_count
      end 
    else
      @categories_hash = {}
    end

    return @categories_hash
  end 

现在代码在包含元素的页面中运行良好:#refinements ul但代码在没有的页面中断。我怎么能这样做,以便在没有#refinements ul时没有任何反应?就像忽略代码而不抛出错误或只是跳到else

2 个答案:

答案 0 :(得分:1)

像这样,例如

def self.parse_categories
  categories = @data.css('#refinements ul').first
  return unless categories

  # carry on
end

答案 1 :(得分:1)

问题是@data.css('#refinements ul')nil时。对? 因此,尝试将其转换为数组并首先进行。 categories = @data.css('#refinements ul').to_a.first