在我的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次,对于每种徽章类型,该错误都会显示一次,然后才能最终生效。
这发生在开发模式下。根据我的阅读,这可能会在生产中消失,但是在开发模式中仍然很烦人。有什么方法可以修复它(最好不要使用缓存类)?
如果将其放在命名空间(如app/models/badge
文件夹)下,则必须像下面这样定义类:
class Badge::GoldBadge < Badge
#...
end
以自动加载它并能够以类似的方式访问它Badge::GoldBadge
。如果您只想通过调用来访问它GoldBadge
,则将其移至app/models
目录。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句