在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用私有方法过滤掉不需要的参数来解决这个问题,但这似乎不像花海的方式。将嵌套参数列入白名单的正确方法是什么?
发布于 2019-09-24 18:43:52
我在使用花美验证时从来没有遇到过这个问题。在app目录中应该有一个validations文件夹,它应该与您的控制器、视图、模板等具有相同的目录结构。您的验证文件应该如下所示:
# 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
endhttps://stackoverflow.com/questions/45833127
复制相似问题