在hanami docs之后,为了阻止动作中的admin
参数,我可以使用以下配置:
params do
required(:email).filled
required(:address).schema do
required(:country).filled
end
end
def call(params)
puts params[:email] # => "alice@example.org"
puts params[:address][:country] # => "Italy"
puts params[:admin] # => nil
end
但这不适用于嵌套参数,即:
params do
required(:email).filled
required(:address).schema do
required(:country).filled
end
end
def call(params)
puts params[:email] # => "alice@example.org"
puts params[:address] # => { country: "Italy", admin: true }
puts params[:address][:admin] # => true
end
我能够通过使用select
使用私有方法过滤掉不需要的参数来解决这个问题,但这似乎不像Hanami方式。将嵌套参数列入白名单的正确方法是什么?
答案 0 :(得分:0)
使用Hanami验证时,我从未遇到过此问题。在app目录中,应该有一个验证文件夹,该文件夹应与您的控制器,视图,模板等具有相同的目录结构。您的验证文件应如下所示:
# apps/web/validations/users/create.rb
module Web
module Validations
module Users
class Create < Web::Action::Params
predicates Web::Validations::CommonPredicates
validations do
required(:email).filled
required(:address).schema do
required(:country).filled
end
end
end
end
end
end
然后,您的控制器应设置要通过验证过滤的参数:
module Web
module Controllers
module Users
class Create
include Web::Action
params Web::Validations::Users::Create
def call(params); end
end
end
end
end