简体   繁体   中英

ActionController::Parameters deprecation warning: Method size is deprecated and will be removed in Rails 5.1

I recently came across this deprecation warning

DEPRECATION WARNING: Method size is deprecated and will be removed in Rails 5.1, as ActionController::Parameters no longer inherits from hash. Using this deprecated behavior exposes potential security problems. If you continue to use this method you may be creating a security vulnerability in your app that can be exploited.

Params looked like this:

<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>

And I tried to find the size of objects like this: params[:objects].size

And then I tried the same thing with length and count , which results in the same warning. What would be the work around for this? .keys.length is something that works, but is this the correct way to do it or am I missing something here?

As mentioned in the comments you have to convert params to Hash since in Rails 5 params no longer inherits from Hash . So .size , .length and .count won't work on params directly.

How to convert it to Hash (shorter code may be possible):

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

puts permitted_params[:product_inspirationals].length

Don't know about your model structure so you have to adjust it to your needs.

For hash, you can find the size by .size method.

The problem is not with the size method here, Problem is in the ActionController::Parameters which is not hash,


Look at the first line inside ActionController::Parameters

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

it should be following as " missing before priority

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

After this .size method should be working

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM