【发布时间】:2015-12-08 11:28:12
【问题描述】:
Rails 4.2.0 / Ruby 2.2.1
在使用defined? 检查具有给定名称的类是否存在时,我遇到了不一致的行为。我想避免使用谓词方法来挽救异常。但如下所示,它返回的结果不一致。这种行为会导致我在控制器中编写的一些代码失败。
$ rails c
Loading development environment (Rails 4.2.0)
2.2.1 :001 > defined?(User)
=> "constant"
2.2.1 :002 > defined?(AuthenticationToken)
=> nil
2.2.1 :003 > AuthenticationToken
=> AuthenticationToken (call 'AuthenticationToken.connection' to establish a connection)
2.2.1 :004 > defined?(AuthenticationToken)
=> "constant"
我也尝试使用Kernel.const_defined?,但发现同样的不一致行为。
$ rails c
Loading development environment (Rails 4.2.0)
2.2.1 :001 > Kernel.const_defined?('Role')
=> false
2.2.1 :002 > Kernel.const_defined?('AuthenticationToken')
=> false
2.2.1 :003 > AuthenticationToken
=> AuthenticationToken (call 'AuthenticationToken.connection' to establish a connection)
2.2.1 :004 > Kernel.const_defined?('AuthenticationToken')
=> true
是否有任何标准方法可以使代码以一致的方式运行?
谢谢。
【问题讨论】:
标签: ruby-on-rails-4.2 uninitialized-constant