我正在尝试使一些类继承自Rails lib目录中的基类。
设置如下:
#lib/ab_tests/base.rb
module AbTests
class Base
# some methods...
end
end
#lib/ab_tests/first_test.rb
module AbTests
class FirstTest < AbTests::Base
# some methods...
end
end
我以config/application.rb
以相当标准的方式要求这些文件
config.autoload_paths += %W(#{Rails.root}/lib/ab_tests)
但是,每当我尝试启动服务器时,我都会遇到致命的LoadError
:
[some path].../activesupport-3.2.12/lib/active_support/dependencies.rb:503:in `load_missing_constant': Expected [project name]/lib/ab_tests/base.rb to define Base (LoadError)
我已尝试过以下两种情况,每次都是同样的问题。
#lib/ab_tests/first_test.rb
class FirstTest < ::AbTests::Base
#lib/ab_tests/first_test.rb
class FirstTest < Base
此外,如果我从AbTests::Base
删除对lib/ab_tests/base.rb
的引用,则没有加载错误,因此不仅仅是存在导致问题的类的事实。只有当我尝试使用它时才会出现问题。
如何完成此继承以及为什么会出现此问题?
答案 0 :(得分:2)
我通常会像这样构建这些东西:
-lib
|- ab_tests.rb
|- ab_tests/
|- base.rb
|- first_test.rb
ab_tests.rb
的位置:
module AbTests
end
base.rb
和first_test.rb
文件应该与您在第一个示例中列出的文件一样,除非您在模块中声明它时不需要指定命名空间(即,只需使用class FirstTest < Base
代替class FirstTest < AbTests::Base
)。