1

我试图让一些类继承自 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::Basefrom的引用,lib/ab_tests/base.rb则不会出现加载错误,因此导致问题的不仅仅是类存在的事实。只有当我尝试使用它时才会出现问题。

我怎样才能完成这种继承,为什么会出现这个问题?

4

1 回答 1

3

我通常像这样构造这些东西:

-lib
  |- ab_tests.rb
  |- ab_tests/
       |- base.rb
       |- first_test.rb

在哪里ab_tests.rb

module AbTests
end

base.rbandfirst_test.rb文件应该与您在第一个示例中列出的一样,除了在模块中声明它时不需要指定命名空间(即,只需使用而class FirstTest < Base不是class FirstTest < AbTests::Base)。

于 2013-07-12T16:38:03.967 回答