Сухая проверка Rails пройдена, когда параметры отсутствуют, и возникает ошибка, когда она присутствует
В моем приложении Rails 7 я хочу использовать гем сухой проверки для проверки входящих JSON внутриcreate
метод моегоMandateController
. В основном на основе этого запроса 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
но вместо этого проверка пройдет.
Ничего особенного внутри класса контроллера:
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 ответ
Я не уверен, является ли это проблемой, но если вы используете рельсыparams
метод или, если вы используете строгие параметры, вызовите.to_h
на нем перед передачей параметров на проверку.
Например, если у вас есть метод ниже
def user_params
params.require(:user).permit(:name, :email)
end
Передайте вышеуказанные параметры следующим образом:result = UserSchema::CreateParams.call(user_params.to_h)