3

這裏是我的類層次結構:抽象類

在我Item模型中,我有這樣的:

class Item < ActiveRecord::Base 
    TYPES = [Weapon::TYPES, Armour::TYPES, Misc::TYPES].flatten.freeze 
end 

然後,抽象類的形式:

class Misc < Item 
    self.abstract_class = true 

    TYPES = G_BASE_NAMES["misc"].keys.freeze 
end 

當我啓動控制檯時,我得到:

/Users/hello_so/localhost/search/app/models/item.rb:7:in`':未初始化的常數項::其它

在第7行。 rb是TYPES = ...行。

爲什麼它會抱怨雜項而不是武器和裝甲? (這首先出現在文件BTW)?


編輯:我其實做的是,在初始化(這是我加入剛剛來嘗試解決該問題)

if Rails.env.development? 
    Dir[Rails.root + 'app/models/*.rb'].map {|f| File.basename(f, '.*').camelize.constantize } 
end 

如果我刪除它,然後我可以運行控制檯。


另一個奇怪的事情:

$ rails c 

> WEAPON 

> NameError: uninitialized constant Weapon #why is it looking for the class?? 
> from /Users/hello_so/localhost/search/app/models/item.rb:7:in `<class:Item>' 

但是如果我裝Item(通過鍵入Item),那麼它會抱怨武器不變。

+0

其中'Misc'定義在哪裏?如果你做':: Misc :: TYPES'會怎麼樣? – apneadiving 2013-03-03 15:56:49

+0

雜項是在models/misc.rb中,對於武器和盔甲完全相同。我試過:: Misc。 – Robin 2013-03-03 15:57:35

+0

它只是雜項,如果它在models/misc.rb中,不是Item :: Misc。 – Intelekshual 2013-03-03 15:58:08

回答

1

您是否試圖將您的抽象類加入:require Rails.root + path

+0

請注意,'Rails.root'是'Pathname',而不是'String','Pathname'的'+'運算符是不同的。 'path'應該是一個相對路徑,而不僅僅是你想要追加的字符串。特別是,不要用'/'來啓動它,因爲這會被解釋爲「從文件系統的根開始」,並且'Rails.root'的值將被拋出。 – user1618143 2014-01-20 19:04:34