如果我在 irb 中执行以下操作:
module Useless ; end
Useless.const_defined? 'Test'
它显然返回
=> false
但是当我在我的任何 Rails 应用程序控制台中执行相同操作时,答案是:
=> true
我的第一个猜测是我在某种程度上与测试框架发生冲突。我想知道是哪一个,当我注意到即使返回“true”,它似乎仍然未定义时,它变得很奇怪......
irb(main):004:0> Useless::Test
NameError: uninitialized constant Useless::Test
from (irb):4
from /home/laurent/.rvm/gems/ruby-2.0.0-p0@nanoscripts/gems/railties-3.2.13/lib/rails/commands/console.rb:47:in `start'
from /home/laurent/.rvm/gems/ruby-2.0.0-p0@nanoscripts/gems/railties-3.2.13/lib/rails/commands/console.rb:8:in `start'
from /home/laurent/.rvm/gems/ruby-2.0.0-p0@nanoscripts/gems/railties-3.2.13/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
有人对此有解释吗?
当然我知道我应该避免将模块命名为“Test”,但关键是我正在动态地将一些类和模块生成到一个模块中,我将其用作数据库自省的命名空间。因此,没有什么可以阻止将表命名为 test (这就是我发现这件事的方式),这会触发创建一个名为:
MyNameSpaceForDynamicallyCreatedObjectsFromDatabase::Test
基本上我该怎么办?
- 硬编码测试的东西?然后是否有一个详尽的表名列表,我应该对其进行硬编码?
- 是否有另一种方法可以确定模块中是否存在常量而不干扰我与之冲突的任何底层机制?
任何帮助表示赞赏。Rgds