2016-10-03 107 views
2

在我的Rails項目中,我想獲取嵌套在模塊A內的所有模塊。Ruby on Rails:獲取嵌套模塊?

文件LIB /資產/一個/ b.rb,組成:

module A 
    module B 
    end 
end 

在軌道控制檯:

A.constants 
    => [] 
A::B.class 
    => Module 
A.constants 
    => [:B] 

爲什麼是第一行返回一個空數組,以及如何我能解決問題嗎?

回答

0

這是因爲如何Rails的自動加載的作品。

當您致電A.constants Rails在a.rb文件中找到A並獲取在此處定義的常量。因爲你似乎沒有在那裏定義任何常量,所以它是空的數組。

當您致電A::B.class Rails自動加載尋找A::B並加載a/b.rb。因此,下次您撥打A.constants時,它將返回在a.rba/b.rb中定義的常量,因爲這兩個文件現在都已加載。這就是爲什麼它第二次返回B

所以,你解決不了的問題。這是因爲它是由Rails自動加載工作引起的。

此外,你說你的模型在lib/assets/,但這沒有什麼區別,因爲如果他們在models/,它們也是一樣的。

+0

恐怕沒有a.rb文件,所以這不是問題的答案。你需要複製我在Rails控制檯中所做的所有事情(如文件夾'a',文件'b.rb'如圖所示)。 –