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はRubyの構文構造ではありません。rescueこれは通常の関数であり、それに対応するにはブロックが必要です。あなたのコードでは、コードは与えられず、rescue_from実行され、効果的にスキップされます-それ以前に発生した例外とは関係ありません(のputs代わりに、のような他の関数を配置した場合と同じようにrescue_from)。

ここrescue_fromで使用例を参照してください。

このコードを機能させるには、バニラ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 に答える