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

問題は がいつなの@data.css('#refinements ul')かですnil。右?それで、それを配列に変換してみてください。 categories = @data.css('#refinements ul').to_a.first

于 2013-08-22T09:56:13.723 に答える
1

たとえば、このように

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

  # carry on
end
于 2013-08-22T09:40:40.977 に答える