irbで次のことを行うと:
module Useless ; end
Useless.const_defined? 'Test'
明らかに返ってきます
=> false
しかし、Rails Apps コンソールのいずれかで同じことを行うと、答えは次のようになります。
=> 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