【发布时间】: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 的别名吗?这在任何情况下都有意义吗?
【问题讨论】:
-
是的,应该使用
fail或raise抛出TypeError。你能提供更多的上下文吗?有什么宝石在玩吗? -
谢谢@hoffm。是的,这就是我的想法,在上面发布了一些附加代码,本质上它只是 Devise 的自定义策略
-
@hoffm 看起来 devise 在其某些代码中也使用了该语法
-
您使用的是什么版本的设计?看起来最新的不这样做github.com/plataformatec/devise/…
-
@hoffm 看起来像是映射到 github.com/plataformatec/devise/blob/master/config/locales/… 文件
标签: ruby exception exception-handling