0

我試圖讓一些類從Rails lib目錄中的基類繼承。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 

另外,如果我從lib/ab_tests/base.rb刪除提及AbTests::Base那麼有沒有加載錯誤,所以它不是簡單的類存在引起該問題的事實。只有當我嘗試使用它時纔會出現此問題。

我該如何完成這個繼承,爲什麼會發生這個問題?

回答

1

我經常組織這些事情是這樣的:

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

其中ab_tests.rb是:

module AbTests 
end 

base.rbfirst_test.rb文件應爲你在第一個例子列出它們,除非你當您在模塊中聲明名稱空間時不需要指定名稱空間(即,只需使用class FirstTest < Base而不是class FirstTest < AbTests::Base)。