这里是我的类层次结构:抽象类
在我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
),那么它会抱怨武器不变。
其中'Misc'定义在哪里?如果你做':: Misc :: TYPES'会怎么样? – apneadiving 2013-03-03 15:56:49
杂项是在models/misc.rb中,对于武器和盔甲完全相同。我试过:: Misc。 – Robin 2013-03-03 15:57:35
它只是杂项,如果它在models/misc.rb中,不是Item :: Misc。 – Intelekshual 2013-03-03 15:58:08