2017-04-06 54 views
1

我的用户输入具有location键,其值可以是一个数组:数组和字符串许可证相同的参数

params # => {"location"=>["California", "New York"], "email"=>"[email protected]", "name"=>"Test"} 

或字符串:

params # => {"location"=>"California", "email"=>"[email protected]", "name"=>"Test"} 

我想知道什么是最好的方法是允许一个数组或字符串。

我能看到的最清洁的方式是将:locationlocation: []作为允许的参数添加,但我不确定这是否是完成此操作的正确方法。

def params 
    params.permit(
    :name, 
    :email, 
    :location, 
    location: [] 
) 
end 

有什么建议吗?这是做到这一点的正确方法吗?

+0

您可以在'params'方法更改参数。但你现在的解决方案是相当不错的 – Ruslan

+1

这实际上是一个StackTooDeep错误。方法'params'将不得不重新命名。 –

+1

顺便说一句,强制变量'x'到数组的方法可能是'[* x]' –

回答

0

请记住,permit用于whitelist parameters for Active Model mass assignment。所以你的解决方案可能会很好。另一种方法是强制location为Array(如果它已经数组将保持不变):

def permitted_params 
    params["location"] = Array(params["location"]) 
    params.permit(
    :name, 
    :email, 
    location: [] 
) 
end