7

我正在使用 Rails 4.0.2。我在关注目录中添加了子目录(带有模型名称):

  • /app/models/concerns/company/cache_concern.rb
  • /app/models/concerns/user/cache_concern.rb
  • /app/models/concerns/document/cache_concern.rb

公司目录中的 cache_concern.rb 有以下内容:

module Company::CacheConcern
  included do
    ...
  end
end

在我的模型课上,我有:

class Company
    include Company::CacheConcern
...    
end

一切都很好,直到我开始生产。然后我得到以下异常:

`load_missing_constant':自动加载常量 Company::CacheConcern (RuntimeError) 时检测到循环依赖

为了解决我的问题,我将关注文件中的命名空间从 Company::CacheConcern 更改为 Concerns::Company::CacheConcern。这允许我在生产环境中加载应用程序。

但是现在我在使用公司类的关注文件中的开发环境存在问题:

NoMethodError(Concerns::Company:Module 的未定义方法“current_company”):

所以看起来他正在关注目录中搜索。在生产中一切都很好。为了解决这个问题,我可以在关注文件的类名前添加两个冒号来使用模型目录中的类。

我知道生产模式的行为与开发模式不同,因为将整个应用程序缓存在内存中。我检查了所有类似的帖子。我是否需要在模型目录中的类名前面在关注文件中使用两个冒号?如果有人能向我解释这种奇怪的情况,我将不胜感激。

谢谢

4

1 回答 1

2

你这样做我认为这是错误的: 为了解决我的问题,我将关注文件中的命名空间从 Company::CacheConcern 更改为 Concerns::Company::CacheConcern。这允许我在生产环境中加载应用程序。

而是这样做

Companies::CacheConcern 并将您的文件夹重命名为 Companies/cache_concern.rb

于 2014-10-24T08:10:11.817 回答