在我的Rails 4应用程序中,我有一个基本模型,我们称之为Badge,它位于/app/models/badge.rb
。
然后,我有大量从徽章继承的特定徽章,让我们说GoldBadge
和SilverBadge
(实际上还有更多)。所有这些文件都位于/app/model/badge/<name>_badge.rb
。例如,/app/model/badge/gold_badge.rb
。
GoldBadge的类声明如下所示
class GoldBadge < Badge
...
然而,Rails(或Ruby,我真的不知道)自动加载器,只在第一次尝试时才能找到这些文件。我的意思是当我第一次访问需要使用GoldBadge
的页面时,例如,我收到以下错误:
Unable to autoload constant Badge::GoldBadge, expected /path_to_my_rails_app/app/models/badge/gold_badge.rb to define it
这很奇怪,因为该类是在该文件中定义的。然而,更奇怪的是,如果我然后刷新页面,一切正常 - 找到了类!
在我引用这些徽章的多种不同类型的页面上,我必须为每种不同的类型刷新一次页面,然后才能使用。例如,如果我有一个使用GoldBadge
,SilverBadge
和BronzeBadge
的网页,我会刷新页面3次,每个徽章类型会显示一次该错误终于可以了。
这在开发模式中发生。从我所读过的内容来看,这可能会在制作中消失,但在开发模式下它仍然非常烦人。有没有办法解决它(最好没有缓存类)?
答案 0 :(得分:2)
如果你把它放在命名空间下,比如app/models/badge
文件夹,你就可以定义你的类:
class Badge::GoldBadge < Badge
#...
end
自动加载它并能够以Badge::GoldBadge
的方式访问它。
如果您只想调用GoldBadge
来访问它,请将其移至app/models
目录。