2017-04-06 38 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