Не удалось загрузить Dry::Schema::MessageCompiler внутри модуля.

У меня возникла следующая проблема при использовании драгоценного камня сухой схемы.

Когда я вызываю консоль, константа загружается нормально, как показано на рисунке:

Однако я пытаюсь вызвать его внутри модуля, и в этом модуле появляется следующее сообщение об ошибке. (В этом примере я пытаюсь вызвать константу в методе инициализации, но это происходит везде, где я вызываю)

На всякий случай это полный код файла:

      module Validators
  module Adapters
    class DrySchemaValidatorAdapter
      attr_reader :entity

      def initialize(entity:)
        @entity = entity
      end

      def validate(params:, caller_method:)
        validation_schema = schema(caller_method:).call(params.to_h)
        Structs::ValidationResponseStruct.new(!validation.failure?, validation.errors.to_h)
      end

      private

      def schema(caller_method:)
        "Schemas::#{entity}::#{caller_method.upcase}".constantize
      end
    end
  end
end

Эта линиядолжен вернутьблок, и «константизация» работает по назначению, просто чтобы вы знали, что я здесь делаю.

Я уже пробовал использовать require, но это не помогло.

Заранее спасибо.

Я пытался использовать require, но безуспешно.

Чего я хочу: иметь возможность использовать драгоценный камень внутри модулей/классов.

ОБНОВЛЕНИЕ: найдено решение

Я расширил модуль схемами во время создания экземпляра адаптера, что, похоже, решило проблему.

      def initialize(entity:)
    @entity = entity
    extend "Schemas::#{entity}".constantize
end

Однако я не знаю, почему это решает проблему и почему проблема возникла вообще.

1 ответ

ОБНОВЛЕНИЕ: найдено решение

Я расширил модуль схемами во время создания экземпляра адаптера, что, похоже, решило проблему.

      def initialize(entity:)
    @entity = entity
    extend "Schemas::#{entity}".constantize
end

Однако я не знаю, почему это решает проблему и почему проблема возникла вообще.

Другие вопросы по тегам