ruby-on-rails - 如果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
那么,如果我引入一个子目录,是不是一定要引入一个子模块呢?
解决方案
看起来 - 正如对问题本身的评论所指出的那样,
- 如果我介绍一个子目录,如果你需要它自动加载,似乎需要一个子模块。
- 如果你手动加载一个类,你可以绕过这个