在将gem dry rails添加到rails应用程序后,我定义了一个合同:
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
但我不知道如何使这份合同生效。假设我有一个名为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
我如何让这个控制器使用合同New来运行验证?
当我理解https://github.com/dry-rb/dry-rails/blob/v0.5.0/spec/dummy/app/controllers/users_controller.rb正确地,您需要调用safe_params
而不是params
特别是safe_params.success?
或safe_params[:id]
除此之外;HTTP边界";,dry建议使用dry模式而不是dry验证。
你提到的合同更多的是针对运营商