在我的Rails 7应用程序中,我想使用dry-validation gem来验证MandateController
的create
方法中传入的JSON。基于这个JSON请求:
"sdd_setup_request": {
"return_url": "https://example.com/return",
"data": {
(...)
}
}
}
我尝试使用验证器类验证它:
params do
required(:sdd_setup_request).schema do
required(:return_url).value(:string)
required(:data).hash do
(...)
end
end
end
end
但是仍然得到一个错误sdd_setup_request is missing
,当我在验证器类中将其更改为optional
时,它将被传递。但是当我想测试其他验证是否有效并从JSON文件中删除return_url
时,我应该得到一个缺少return_url
的错误,但是验证会通过。
控制器类内部没有什么花哨的东西:
class MandatesController < BaseController
def create
result = SddRequestValidator.call(params)
if result.success?
(...)
else
render_error(result.errors.to_h, status: :bad_request)
end
end
我错过了什么?
[编辑]
# Gemfile.lock
dry-validation (1.10.0)
我也有initializers/dry_validator.rb
:
require 'dry/validation'
Dry::Validation.load_extensions(:monads)
父类ApplicationService
如下:
class ApplicationService < Dry::Validation::Contract
def self.call(*args)
new.call(*args)
end
end
1条答案
按热度按时间f8rj6qna1#
我不确定这是否是一个问题,但如果你使用的是rails
params
方法,或者如果你使用的是强参数,那么在传递参数进行验证之前调用.to_h
。例如,如果你有下面的方法
像这样传递以上参数:
result = UserSchema::CreateParams.call(user_params.to_h)