0

レール 4.2.0 / ルビー 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 

そのコードを一貫した方法で動作させる標準的な方法はありますか?

ありがとう。

4

1 に答える 1