抽象类在Rails中未正确加载

时间:2013-03-03 15:55:14

标签: ruby-on-rails ruby-on-rails-3 abstract-class eager-loading

这是我的班级层次结构:

在我的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`':ininitialized constant Item :: Misc

  

item.rb中的第7行是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),那么它会抱怨WEAPON常量。

1 个答案:

答案 0 :(得分:1)

您是否尝试过包含抽象类:require Rails.root + path