コードで奇妙なバグに遭遇しました。ライブラリに次の 2 つのファイルを含む Rails アプリケーションがあります。
lib/module_one/module_two/class_one.rb
module ModuleOne
module Moduletwo
class ClassOne
class << self
def test
puts 'Class one'
ClassTwo.test
end
end
end
end
end
と
lib/module_one/module_two/class_two.rb
module ModuleOne
module ModuleTwo
class ClassTwo
def self.test
puts 'Class two'
end
end
end
end
今私の問題は、コンソールに入って次のように書くときです:
ModuleOne::ModuleTwo::ClassOne.test
次をスローします。NameError: uninitialized constant ClassTwo
奇妙なことに、問題は のclass << self
代わりに を使用することに関連しているようですself.method
。このように class_one.rb ファイルを変更すると、動作します!:
module ModuleOne
module ModuleTwo
class ClassOne
def self.test
puts 'Class one'
ClassTwo.test
end
end
end
end
次のようにapplication.rbにファイルをロードしています:
config.autoload_paths += %W(#{config.root}/lib)
これはレールのバグですか、それとも私が何か間違っているだけですか?
私はレール3.1.3btwを使用しています