我正在使用 Rails 4.0.2。我在 Concern 目录中添加了子目录(带有模型名称):
公司目录中的cache_concern.rb有以下内容:
module Company::CacheConcern
included do
...
end
end
在我的模型课上,我有:
class Company
include Company::CacheConcern
...
end
一切都很好,直到我去生产。然后我得到以下异常:
`load_missing_constant': Circular dependency detected while autoloading constant Company::CacheConcern (RuntimeError)
为了解决我的问题,我将关注文件中的命名空间从 Company::CacheConcern 更改为 Concerns::Company::CacheConcern。这允许我在生产环境中加载应用程序。
但是现在我在使用 Company 类的行中的关注文件的开发环境中遇到问题:
NoMethodError (undefined method `current_company' for Concerns::Company:Module):
所以看起来他正在关注目录中搜索。在生产中一切都很好。为了解决这个问题,我可以在类名前添加两个冒号来使用模型目录中的类。
我知道生产模式与开发的行为方式不同,因为将整个应用程序缓存在内存中。我检查了所有类似的帖子。我是否需要在模型目录中的类名前面加上两个冒号在关注文件中?如果有人能向我解释这种奇怪的情况,我将不胜感激。
谢谢
最佳答案
你这样做我认为是错误的:
为了解决我的问题,我将关注文件中的命名空间从 Company::CacheConcern 更改为 Concerns::Company::CacheConcern。这允许我在生产环境中加载应用程序。
而是这样做
Companies::CacheConcern 并将您的文件夹重命名为 company/cache_concern.rb
关于ruby-on-rails-4 - 异常 : "load_missing_constant Circular dependency detected while autoloading constant" in Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21238587/