我在使用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
我不知道为什么它解决了这个问题,也不知道为什么这个问题首先发生。
1条答案
按热度按时间xtupzzrd1#
更新:找到解决方案
我在适配器示例化期间用模式扩展了模块,这似乎解决了问题。
def initialize(entity:)@entity = entity extend“Schemas::#{entity}". constantiize end我不知道为什么它解决了这个问题,也不知道为什么这个问题会发生。