【问题标题】:Not able to include Module in a Class in Rails Application无法在 Rails 应用程序的类中包含模块
【发布时间】:2018-07-05 01:57:28
【问题描述】:

我有一个包含模块(ServerConstants)的类(服务器)

class Server
   include ServerConstants

这两个文件都位于 lib/server 文件夹中

我收到一个错误:无法自动加载常量 Server::ServerConstants

  1. 当我明确使用 require 时,它​​可以正常工作。
  2. 我阅读了 Rails 自动加载功能,想知道为什么它没有启动。我的 application.rb 文件似乎包含正确的自动加载路径。

    config.autoload_paths += Dir["#{config.root}/lib/**/"]
    config.autoload_paths += Dir["#{config.root}/app/models/**/"]
    

我错过了什么? 我们使用的是 Rails 4.2.8

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    Include 语句直接查找未定义范围或与名称冲突的模块。但是当你把它放在 lib/server/ 目录中时,可以通过告诉include 语句来访问它,在哪个目录中查找ServerConstants 模块。这就是为什么如果您使用include Server::ServerConstants,它的工作原理就像现在您已经提到要查看哪个文件夹以及现在提到您要访问的模块的范围一样。

    【讨论】:

      【解决方案2】:

      最后我通过 Hit and Trial 找到了答案,虽然我不确定它为什么会起作用。

      而不是像

      那样定义模块
      module ServerConstants
      

      我用过

      module Server::ServerConstants
      

      它成功了!

      另一个发现:

      仅当您具有相同名称的文件夹和类(包括模块)时才会出现此问题。在我的情况下,服务器文件夹包含 Server 类和 ServerConstants 模块。当我将 Server 的名称重构为 Server_X 时,问题就消失了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-19
        • 1970-01-01
        • 2012-08-14
        • 2017-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-25
        相关资源
        最近更新 更多