3

初学者问题也许:

我正在尝试使用 Koala 从 facebook 检查我的用户权限。在某些情况下,我会抛出一个错误。所以我只想抓住它并重定向到重新认证。

  def check_facebook_permissions
    if token = current_user.try(:authentications).find_by_provider('facebook').try(:token)
      graph = Koala::Facebook::API.new(token)
      permissions = graph.get_connections('me','permissions')
      session[:facebook] = {}
      session[:facebook][:ask_publish_actions] = true if permissions[0]['publish_actions'] != true && permissions[0]['publish_stream'] != true
    end
  rescue_from Koala::Facebook::APIError
    # Do something funky here
  end

我认为这很简单,但我从来没有救过我。相反,我得到:

Koala::Facebook::APIError (OAuthException: Error validating access token: Session has expired at unix time 1324026000. The current unix time is 1324352685.):

我在这里想念什么?

4

2 回答 2

8

rescue_from不是像rescueis 这样的 Ruby 语法结构——它是一个普通函数,你需要一个块来配合它。在您的代码中,没有给出代码、rescue_from执行并有效地跳过代码 - 它之后的内容与之前引发的任何异常无关(就像您放置任何其他函数一样puts,而不是rescue_from)。

在此处rescue_from查看使用示例。

要使此代码正常工作,您需要 vanilla Ruby rescue

rescue Koala::Facebook::APIError => e
于 2011-12-20T03:50:55.717 回答
0

在 Ruby 中处理错误的正确语法是:

begin
  # do something that will throw an error
rescue StandardError => e # StandardError is the root class of most errors
  # rescue the error
end
于 2011-12-20T03:51:25.170 回答