问题描述
如何在 Rails 中允许 params
中的变量 param 可以是字符串或哈希?
例如,如何允许参数“abc”?
"abc" => "xz" (case1)
# or
"abc" => { "v" : "yz"} (case2)
参数可以是上述任何一种格式。
如果我使用 params.permit(:abc,abc: [:v])
(认为这将允许两者)但这只允许 hash
并且 abc
在 case1 时设置为 nil
。
解决方法
在使用 permit
/strong 参数之前统一这两种变体怎么样?
if params[:abc].is_a? String
params[:abc] = {v: params[:abc]}
end
现在您知道如果 :abc
存在,它将是一个 Hash
。
这不是一个好方法,最好始终为参数使用相同的类型。您应该为这两个参数使用不同的名称。
但是如果您仍然想为两种参数使用一个名称,那么您有两种选择。在允许之前将字符串转换为哈希或哈希为字符串,或者根据参数的类型添加检查以允许。
if params[:abc].is_a? String
params.permit(:abc)
else
params.permit(abc: [:v])
end