使用 DryValidations 验证查询参数时缺少模块
Missing Module when using DryValidations to validate query params
我有一个 jsonapi 端点,我在其中获取查询参数 "include",其中有几个对象由“,”分隔,
现在,我使用 Dry::Validations 验证我的参数,并希望对该字段进行预处理,以便获得一个字符串数组。
为了实现这个,我根据文档做了这个:
module CustomTypes
include Dry::Types.module
IncludeRelatedObject = Types::String.constructor do |itm|
itm.split(',')&.map :chomp
end
end
现在,当我 运行 我的测试时,我得到这个错误:
Failure/Error:
IncludeRelatedObject = Types::String.constructor do |itm|
itm.split(',')&.map :chomp
end
NameError:
uninitialized constant CustomTypes::Types
这是我的验证:
Dry::Validation.Params do
configure do
config.type_specs = true
end
optional(:include, CustomTypes::IncludeRelatedObject).each { :filled? & :str? }
end
知道我的代码有什么问题吗?
要为验证定义自定义类型,您应该使用类型模块。所以你应该将模块名称从 CustomTypes
更改为 Types
.
module Types
include Dry::Types.module
IncludeRelatedObject = Types::String.constructor do |itm|
itm.split(',')&.map :chomp
end
end
include Dry::Types.module
基本上是将常量变形到它所包含的模块中。你有 CustomTypes::String
等等,这是你的自定义类型中应该引用的内容:
module CustomTypes
include Dry::Types.module
# IncludeRelatedObject = Types::String.constructor do |itm|
IncludeRelatedObject = CustomTypes::String.constructor do |itm|
itm.split(',').map(&:chomp)
end
end
我有一个 jsonapi 端点,我在其中获取查询参数 "include",其中有几个对象由“,”分隔,
现在,我使用 Dry::Validations 验证我的参数,并希望对该字段进行预处理,以便获得一个字符串数组。
为了实现这个,我根据文档做了这个:
module CustomTypes
include Dry::Types.module
IncludeRelatedObject = Types::String.constructor do |itm|
itm.split(',')&.map :chomp
end
end
现在,当我 运行 我的测试时,我得到这个错误:
Failure/Error: IncludeRelatedObject = Types::String.constructor do |itm| itm.split(',')&.map :chomp end
NameError: uninitialized constant CustomTypes::Types
这是我的验证:
Dry::Validation.Params do
configure do
config.type_specs = true
end
optional(:include, CustomTypes::IncludeRelatedObject).each { :filled? & :str? }
end
知道我的代码有什么问题吗?
要为验证定义自定义类型,您应该使用类型模块。所以你应该将模块名称从 CustomTypes
更改为 Types
.
module Types
include Dry::Types.module
IncludeRelatedObject = Types::String.constructor do |itm|
itm.split(',')&.map :chomp
end
end
include Dry::Types.module
基本上是将常量变形到它所包含的模块中。你有 CustomTypes::String
等等,这是你的自定义类型中应该引用的内容:
module CustomTypes
include Dry::Types.module
# IncludeRelatedObject = Types::String.constructor do |itm|
IncludeRelatedObject = CustomTypes::String.constructor do |itm|
itm.split(',').map(&:chomp)
end
end