after adding the gem dry-rails to my rails application, I have defined a contract:
module Users
module Contracts
class New < ApplicationContract
params do
required(:todo).schema do
required(:title).filled(:string)
required(:items).array(:hash) do
required(:name).filled(:string)
end
end
end
end
end
end
But I don't know how to make this contract work. Let's say I have a controller named UsersController:
module Api
module V1
class UsersController < ApplicationController
before_action :set_user
private
def set_user
@user = User.find(params[:user_id])
end
end
end
end
how can I make this controller use the contract New to get validation run?
When I understand the example at https://github.com/dry-rb/dry-rails/blob/v0.5.0/spec/dummy/app/controllers/users_controller.rb correctly, you need to call
safe_params
instead ofparams
Specifically
safe_params.success?
orsafe_params[:id]
Besides this, at the "HTTP boundary", dry recommends to use dry-schema instead of dry-validation.
The contract you mentioned is more for an operator