Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 4.2不会意识到我的模型问题_Ruby On Rails_Ruby On Rails 4_Ruby On Rails 4.2 - Fatal编程技术网

Ruby on rails Rails 4.2不会意识到我的模型问题

Ruby on rails Rails 4.2不会意识到我的模型问题,ruby-on-rails,ruby-on-rails-4,ruby-on-rails-4.2,Ruby On Rails,Ruby On Rails 4,Ruby On Rails 4.2,一个版本有多大的不同!在我的Rails 3.2应用程序中,我使用了关注点,它们的设置如下: --应用程序 --模型 category.rb product.rb --担心 --类别 第三方 第三方 --产品 第三方 第三方 --仓库 第三方 第三方 我关注的是同一个名字,名称空间被划分到不同的目录中。这就是我被教导这样做的方式,它比Rails 4.2默认将一堆Ruby文件集中在一个目录中更有意义。如果我有多个对象需要与多个第三方API交互,那么这是最好的方法 但是将此应用程序升级到Rails

一个版本有多大的不同!在我的Rails 3.2应用程序中,我使用了关注点,它们的设置如下:

--应用程序
--模型
category.rb
product.rb
--担心
--类别
第三方
第三方
--产品
第三方
第三方
--仓库
第三方
第三方

我关注的是同一个名字,名称空间被划分到不同的目录中。这就是我被教导这样做的方式,它比Rails 4.2默认将一堆Ruby文件集中在一个目录中更有意义。如果我有多个对象需要与多个第三方API交互,那么这是最好的方法

但是将此应用程序升级到Rails 4.2,它拒绝工作。我收到了很多很多关于这些问题的投诉:

Unable to autoload constant Category::ThirdPartyA
它“期望文件定义它”或其他东西。该文件如下所示:

module EbayInteraction

  extend ActiveSupport::Concern

  module ClassMethods
  ...
include Category::ThirdPartyA
不,那里没有其他名称空间。但是Rails 3.2并不需要它。它工作得非常完美

因此,我进入文件并将声明更改为:

module Category::ThirdPartyA
我不知道这是否正确。我对模块和名称空间感到非常困惑,这两个概念对我来说都毫无意义

然后我进入模型本身,包括如下关注点:

module EbayInteraction

  extend ActiveSupport::Concern

  module ClassMethods
  ...
include Category::ThirdPartyA
我克服了这个错误。然后抱怨第三方,所以我也这么做。等等

当我完成后,我现在收到以下投诉:

Circular dependency detected while autoloading constant Category::ThirdPartyA
这是一个愚蠢和误导性的错误。这种担心只有一种方法。不可能发生任何事情


现在我被卡住了。我唯一的选择是重命名我的所有文件并将它们合并到关注点目录中。我真的不想这样做,它不可维护或扩展。这是怎么回事?

我决定不浪费任何有效率的时间来修复我在4.2中的名称空间问题。核心团队似乎再次“改进”了公约的一项工作

  • 我在所有相关文件名前面加上了模型名,其中每个文件名都是
    include
    d。并相应地更改了模块名称

  • 我将所有关注点从他们的模型子目录中移到了关注点级别


现在一切都恢复正常了,尽管它看起来恶心恶心。不管怎样,担忧是愚蠢的。这只是一种将胖模型内容放入不同文件的方法。我正在移动此应用程序以使用gem和架构。这将使我免受Rails 5中引入的任何愚蠢行为的影响,也是我今后坚持使用该平台的唯一方法。

我已经能够通过将我的名称空间关注点移出
关注点
目录来实现这一点

#app/models/model_one.rb
类ModelOne
我不清楚您的目录结构到底是什么。发布一个再现问题的最小示例会有所帮助(例如,您能否仅用两个关注点再现问题?如果是,每个关注点和您的模型中到底有什么?)