Почему я получаю неинициализированную постоянную ошибку, если класс в подпапке в рельсах? - PullRequest
0 голосов
/ 11 марта 2020

У меня странная проблема, которая преследует меня. У меня есть некоторые пользовательские классы, определенные в /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, вместо подпапки enums, он может ссылаться это просто отлично.

Я уверен, что я делаю что-то, в основном c, очень неправильно, но я не понимаю, почему Rails может найти какие-либо классы в модулях, но не в подкаталогах?

Update / Изменить: Кажется, работает, если я обращаюсь к нему, добавьте его в дополнительный подмодуль и обозначьте его как Forms::Enums::DataType::TEXT, например так:


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

Итак, если я введу подкаталог, требуется ли это всегда вводить субмодуль?

1 Ответ

0 голосов
/ 20 марта 2020

Похоже, что, как уже отмечалось в комментариях к самому вопросу,

  1. Если я введу подкаталог, если он вам нужен, он загружается автоматически, то кажется, что подмодуль необходим.
  2. Это можно обойти, если вы вручную загрузите класс
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...