首页 > 解决方案 > 如果rails的子文件夹中的类,为什么我会收到未初始化的常量错误?

问题描述

我有一个奇怪的问题困扰着我。我有一些自定义类定义在/lib/**/**我试图加载到控制器中。所以给出:


# dir: lib/forms/enums/data_type.rb
module Forms
  class DataType
    TEXT       = 0
    NUMBER     = 1
  end
end


# dir: controllers/form_controller.rb
class FormController < ApplicationController
  def update
   # Here, I get the uninitialized constant error for MyModule::DataType
   if params[:someAttr] ===  Forms::DataType::TEXT
    ...
   end
  ...
  end
...
end

但是,如果我将DataType类放在 dir:lib/forms/中,即与 相同的文件夹中forms,而不是 subfolder enums,它可以很好地引用它。

我确定我做错了一些基本的事情,但我不明白为什么 Rails 可以在模块下找到任何类,但不能在子目录中找到?

更新/编辑:如果我将其添加到附加子模块下,它似乎可以工作,并将其称为Forms::Enums::DataType::TEXT,如下所示:


# dir: lib/forms/enums/data_type.rb
module Forms
  module Enums
    class DataType
      TEXT       = 0
      NUMBER     = 1
    end
  end
end

那么,如果我引入一个子目录,是不是一定要引入一个子模块呢?

标签: ruby-on-railsruby-on-rails-5

解决方案


看起来 - 正如对问题本身的评论所指出的那样,

  1. 如果我介绍一个子目录,如果你需要它自动加载,似乎需要一个子模块。
  2. 如果你手动加载一个类,你可以绕过这个

推荐阅读