2016-10-26 42 views
5

我最近碰到這個棄用警告是的ActionController ::參數棄用警告:方法大小棄用,並將在滑軌被刪除5.1

棄用警告:方法大小棄用,並將在Rails的5.1被刪除,如ActionController::Parameters不再繼承哈希。使用此棄用行爲會暴露潛在的安全問題。如果您繼續使用此方法,則可能會在您的應用中創建可被利用的安全漏洞。

PARAMS是這樣的:

<ActionController::Parameters { "objects" => 
    <ActionController::Parameters { 
    "0"=>{"priority"=>"24", "style"=>"three_pictures"}, 
    "1"=>{"priority"=>"24", "style"=>"three_pictures"}, 
    "2"=>{"priority"=>"24", "style"=>"three_pictures"} 
} permitted: false> } permitted: false> 

我試圖找到的objects這樣的尺寸: params[:objects].size

然後我嘗試同樣的事情lengthcount,這導致在相同的警告。這將是什麼工作? .keys.length是有用的,但是這是做到這一點的正確方法,還是我在這裏錯過了一些東西?

+0

您可以使用'to_h'將'params轉換爲哈希'並訪問這些方法。 – Sravan

+0

'Rails 5 ActionController :: Parameters'現在返回一個Object而不是Hash。 '要訪問對象中的參數,您可以將to_h添加到參數中:' – Sravan

回答

3

正如你必須轉換params哈希因爲在Rails的5 params不再Hash繼承了意見提及。所以.size,.length.count不能直接在params上工作。

如何將其轉換爲Hash(短代碼是可能的):

permitted_params = params.require(:your_model_name).permit(
    :product_inspirationals => [ 
    :priority, 
    :style 
    ] 
).to_h 

puts permitted_params[:product_inspirationals].length 

不知道你的模型結構,所以你必須將它調整到您的需要。

0

對於散列,您可以通過.size方法找到大小。

的問題是不與這裏的尺寸的方法,但問題是在ActionController::Parameters未散列,


看的第一行內ActionController::Parameters

"0"=>{priority"=>"24", "style"=>"three_pictures"} 

應當以下作爲"之前缺少priority

"0"=>{"priority"=>"24", "style"=>"three_pictures"} 

.size method後應該是工作