gpt4 book ai didi

ruby-on-rails - 为什么不自动重新加载的模块不应该在自动重新加载的类中调用静态方法?

转载 作者:太空宇宙 更新时间:2023-11-03 16:37:25 25 4
gpt4 key购买 nike

我最近被“Klass 的副本已从模块树中删除但仍处于事件状态”和 http://makandra.com/notes/528-fixing-a-copy-of-klass-has-been-removed-from-the-module-tree-but-is-still-active 所困扰。完全解决了我的问题。我有一个模块包含在两个调用静态 MyModel.find 方法的 ActiveRecord 类中。

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

最佳答案

当应用程序处于开发模式时,每次发出请求时都会重新构建模型本身,因此对旧类或其实例的任何持续引用都将呈现无效并且将无法正常工作,如果有的话。

让事情正确地自动重新加载可能很棘手,但这是可以做到的。这仅取决于您要尝试做什么。

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

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

如果您需要做一些无法通过将您的扩展程序移动到 app/models 中来解决的事情,您能否提供更多关于您正在尝试做的事情的详细信息?

关于ruby-on-rails - 为什么不自动重新加载的模块不应该在自动重新加载的类中调用静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5746215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com