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