Сухая проверка 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)

Другие вопросы по тегам