ruby-on-rails 无法在模块中加载Dry::Schema::MessageCompiler

zbq4xfa0  于 2023-05-19  发布在  Ruby
关注(0)|答案(1)|浏览(133)

我在使用dry-schema gem时遇到了以下问题。
当我在控制台中调用Dry::Schema.Params时,常量正常加载,如图所示:

但是,我正试图在模块内调用它,在此模块中,出现以下错误消息。(在这个例子中,试图调用initialize方法上的常量,但它发生在我调用的任何地方)

这是完整的文件代码,以防万一:

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

这一行"Schemas::#{entity}::#{caller_method.upcase}".constantize应该返回一个Dry::Schema.Params块,并且“常量化”按预期工作,这样你就知道我在这里做什么了。
我已经试过使用require,但它没有帮助。
先谢谢你。
我试过使用require,但没有成功。
我想要的:能够在模块/类中使用gem。
更新:找到解决方案
我在适配器示例化期间用模式扩展了模块,这似乎解决了问题。

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

我不知道为什么它解决了这个问题,也不知道为什么这个问题首先发生。

xtupzzrd

xtupzzrd1#

更新:找到解决方案
我在适配器示例化期间用模式扩展了模块,这似乎解决了问题。
def initialize(entity:)@entity = entity extend“Schemas::#{entity}". constantiize end我不知道为什么它解决了这个问题,也不知道为什么这个问题会发生。

相关问题