自定义Rails命名空间中的未初始化常量问题

时间:2019-07-09 01:31:23

标签: ruby-on-rails

我有一个Rails项目,想创建一些自定义查询对象供我的应用程序使用。

类文件位于/app/queries/tasks中,它们的示例如下:

module Queries
  module Tasks
    class TaskQuery
      #some code
    end
  end
end

我已将/ app / queries路径添加到自动加载常量,并用rails r 'puts ActiveSupport::Dependencies.autoload_paths'进行了验证,我发现/ app / queries中的所有目录都包括在内,包括/ app / queries / tasks。

但是,当我尝试使用这样的对象(从Rails控制台或控制器)时:

Queries::Tasks::TaskQuery.new()

我得到:

Traceback (most recent call last):
        1: from (irb):1
NameError (uninitialized constant Queries)

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:3)

如果querys文件夹包含一个querys文件夹(其中包含一个tasks文件夹,其中包含task_query文件),您的实际代码将起作用:

queries
└── queries
    └── tasks
        └── task_query.rb

如果查询文件夹位于autoload_paths中,则不必将Tasks包装在Queries模块中,因为Queries是要保留的文件夹它。仅使用Tasks

module Tasks
  class TaskQuery
    ...
  end
end