Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 407
Sambhav Sharma Avatar asked Oct 26 '16 07:10

Sambhav Sharma


1 Answers

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.

like image 146
Sven R. Avatar answered Nov 08 '22 19:11

Sven R.