【问题标题】:How to permit params in Rails 4 where the variable param can be either string or hash?如何在 Rails 4 中允许变量参数可以是字符串或哈希的参数?
【发布时间】:2021-06-19 12:19:22
【问题描述】:
如何在 Rails 中允许 params 变量参数可以是字符串或哈希?
例如,如何允许参数“abc”?
"abc" => "xz" (case1)
# or
"abc" => { "v" : "yz"} (case2)
参数可以是上述任何一种格式。
如果我使用params.permit(:abc, abc: [:v])(认为这将允许两者),但这只允许hash 和abc 在case1 设置为nil。
【问题讨论】:
标签:
ruby-on-rails
ruby
ruby-on-rails-4
strong-parameters
【解决方案1】:
在使用permit/strong 参数之前统一两个变体怎么样?
if params[:abc].is_a? String
params[:abc] = {v: params[:abc]}
end
现在您知道如果存在:abc,它将是Hash。
【解决方案2】:
这不是一个好方法,最好始终为参数使用相同的类型。您应该为这两个参数使用不同的名称。
但是,如果您仍然想为这两种参数使用一个名称,那么您有两种选择。在允许之前将字符串转换为哈希或将哈希转换为字符串,或者根据参数的类型添加检查以允许。
if params[:abc].is_a? String
params.permit(:abc)
else
params.permit(abc: [:v])
end