处理不同类别的404错误

时间:2012-02-07 07:40:46

标签: ruby-on-rails ruby exception-handling mechanize open-uri

我有很多继承Page类的类。它们共享相同的update_ended方法,该方法尝试在页面结束时更新状态。

由于这些Page类面临着不同的问题,因此使用了不同的net / http代理,包括OpenURI,Net :: HTTP和Mechanize。

  def update_ended
    fetch_page(...) 
  rescue OpenURI::HTTPError, Net::HTTPNotFound, Mechanize::ResponseCodeError
    self.ended = true
    ...
    self.save!
  end

我想抓住 404页面未找到异常并结束Page对象。目前我的实现并不足以做到这一点。不同的异常有不同的方式来告诉它是什么类型的HTTP状态。

在上面的例子中,从各种HTTP错误实现中确定代码(例如404)的最佳方法是什么?我是否使用多次救援,或者我在救援中有很多if语句?

1 个答案:

答案 0 :(得分:2)

可能最简单的方法是抓住所有内容并查看消息:

def update_ended
    fetch_page(...) 
rescue Exception => e
    case e.message
        when /404/ then puts '404!'
        when /500/ then puts '500!'
        else puts 'IDK!'
    end
end