Ruby on rails Rails无法仅在第一次尝试时自动加载常量

Ruby on rails Rails无法仅在第一次尝试时自动加载常量,ruby-on-rails,ruby,ruby-on-rails-4,autoload,Ruby On Rails,Ruby,Ruby On Rails 4,Autoload,在我的Rails 4应用程序中,我有一个基本模型,我们称之为Badge,它位于/app/models/Badge.rb中 然后,我有大量从徽章继承的特定徽章,比如说GoldBadge和SilverBadge(实际上还有更多)。所有这些文件都位于/app/model/badge/\u badge.rb中。例如,/app/model/badge/gold\u badge.rb GoldBadge的类声明如下所示 class GoldBadge < Badge ... 这很奇怪,因为类是在

在我的Rails 4应用程序中,我有一个基本模型,我们称之为Badge,它位于
/app/models/Badge.rb

然后,我有大量从徽章继承的特定徽章,比如说
GoldBadge
SilverBadge
(实际上还有更多)。所有这些文件都位于
/app/model/badge/\u badge.rb
中。例如,
/app/model/badge/gold\u badge.rb

GoldBadge的类声明如下所示

class GoldBadge < Badge
  ...
这很奇怪,因为类是在该文件中定义的。然而,更奇怪的是,如果我刷新页面,一切都会正常工作——类被找到了

在我引用了多种不同类型的徽章的页面上,我必须为每种不同的徽章刷新一次页面,然后才能正常工作。例如,如果我有一个使用了
GoldBadge
SilverBadge
BronzeBadge
的页面,我会刷新页面3次,每种徽章类型都会显示一次错误,然后才最终生效


这在开发模式中发生。据我所知,这可能会在生产中消失,但在开发模式中仍然非常烦人。有没有办法修复它(最好不用缓存类)?

如果你把它放在命名空间下,比如
app/models/badge
文件夹,你必须定义你的类,比如:

class Badge::GoldBadge < Badge
  #...
end
class-Badge::GoldBadge
自动加载并能够像
Badge::GoldBadge
那样访问它。
如果您只想通过调用
GoldBadge
访问它,请将其移动到
app/models
目录。

我可以复制您的问题…..但您想做什么还不清楚。你在用STI吗?您是否修改了config/application.rb?谢谢!我以前用这种方式给徽章命名,但遇到了问题,因为我没有把它们称为徽章:。。。在代码的其余部分,我也有同样的问题。但我不想使用名称空间,但我想将具有继承类的文件存储在一个文件夹中。我该怎么做?@GenaShumilkin您想继承哪些类?(我的意思是,那是模型还是库还是什么)@GenaShumilkin你使用单表继承,还是模型属于不同的表?@GenaShumilkin和简单的类定义,比如
class Cat
对您不起作用?顺便说一句,我不确定你的问题是否清楚,所以你希望所有模型文件都转到
/models
,或者你希望在一些
/models/animals
文件夹下有STI类?
class Badge::GoldBadge < Badge
  #...
end