【问题标题】:Symbol is passed to 'raise'符号传递给“raise”
【发布时间】:2017-10-18 15:38:15
【问题描述】:

上下文代码:

module Devise
  module Strategies
    class AuthxAuthenticatable < Authenticatable
      def valid?
        !params[scope].nil?
      end

      def authenticate!
        resource = mapping.to.authenticate_with_credentials(params[scope])
        return fail(:invalid) if resource.nil?
        success!(resource) if validate(resource)
      end
    end
  end
end

Warden::Strategies.add(:authx_authenticatable, Devise::Strategies::AuthxAuthenticatable)

遇到了一些将符号传递给raise的代码:

raise(:invalid)

看起来没有任何 raise 的猴子补丁来处理符号参数。好像曾经使用过fail,如果我使用fail,代码实际上可以工作。

这不只是raise 的别名吗?这在任何情况下都有意义吗?

【问题讨论】:

  • 是的,应该使用failraise 抛出TypeError。你能提供更多的上下文吗?有什么宝石在玩吗?
  • 谢谢@hoffm。是的,这就是我的想法,在上面发布了一些附加代码,本质上它只是 Devise 的自定义策略
  • @hoffm 看起来 devise 在其某些代码中也使用了该语法
  • 您使用的是什么版本的设计?看起来最新的不这样做github.com/plataformatec/devise/…

标签: ruby exception exception-handling


【解决方案1】:

看起来正在使用的fail 方法是warden 方法:

http://www.rubydoc.info/github/hassox/warden/Warden%2FStrategies%2FBase:fail

【讨论】:

    猜你喜欢
    • 2013-07-26
    • 2014-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    相关资源
    最近更新 更多