0

我有以下内容:

 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

4

2 回答 2

1

像这样,例如

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

  # carry on
end
于 2013-08-22T09:40:40.977 回答
1

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

于 2013-08-22T09:56:13.723 回答