Ruby on rails 为什么不应该';t不使用';在自动重新加载的类中,是否自动调用静态方法?

Ruby on rails 为什么不应该';t不使用';在自动重新加载的类中,是否自动调用静态方法?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我最近被“Klass的一个副本已从模块树中删除,但仍处于活动状态”打断,并完全解决了我的问题。我从两个ActiveRecord类中包含了一个模块,该类调用静态MyModel.find方法 我知道我可以用几种不同的方法来解决我的问题,但我想知道,Ruby到底在做什么,使得以这种方式调用静态方法成为一个坏主意?当应用程序处于开发模式时,每次发出请求时,模型本身都会被重建,因此,任何对旧类或它们的实例的延迟引用都将被视为无效,并且如果没有,也无法正常工作 让东西正确地自动重新加载可能很棘手,但这是可以

我最近被“Klass的一个副本已从模块树中删除,但仍处于活动状态”打断,并完全解决了我的问题。我从两个ActiveRecord类中包含了一个模块,该类调用静态MyModel.find方法


我知道我可以用几种不同的方法来解决我的问题,但我想知道,Ruby到底在做什么,使得以这种方式调用静态方法成为一个坏主意?

当应用程序处于开发模式时,每次发出请求时,模型本身都会被重建,因此,任何对旧类或它们的实例的延迟引用都将被视为无效,并且如果没有,也无法正常工作

让东西正确地自动重新加载可能很棘手,但这是可以做到的。这取决于你想做什么

由于
app/
结构中的几乎所有内容都会自动重新加载,因此您也可以通过重新加载扩展来避免这个问题。
lib/
中的内容不会重新加载,可能会导致冲突

我认为这里的主要问题是
lib/
中的扩展将解析该类并保留该引用,即使该类在后续加载时被替换


如果您需要做这样的事情,但无法通过将扩展移动到
应用程序/模型中来解决,您能否提供更多关于您正在尝试做什么的详细信息?

事实证明,我遇到的具体问题是因为我试图记住将调用到我的模型中的特定方法。所以我拿出了备忘录,一切正常。不小心过早地按下了回车键。我真正想要的是对引擎盖下发生的事情的解释。。。如果这仅仅是我的模块引用旧类或实例的问题,那么消息不会被反转吗?难道我的模块永远不会从模块树中删除吗?我不是在寻找解决方案,而是深入解释Ruby的这一方面是如何工作的。