ActionController ::参数弃用警告:不推荐使用方法大小,将在Rails 5.1中删除

时间:2016-10-26 07:33:53

标签: ruby-on-rails ruby-on-rails-5

我最近遇到了这个弃用警告

  

DEPRECATION WARNING:不推荐使用方法大小,并且将在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是有效的,但这是正确的做法,还是我错过了什么?

2 个答案:

答案 0 :(得分:5)

正如评论中所提到的,您必须将params转换为Hash,因为在Rails 5中params不再继承Hash。因此.size.length.count不能直接使用参数。

如何将其转换为Hash(可能更短的代码):

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

puts permitted_params[:product_inspirationals].length

不了解您的模型结构,因此您必须根据需要进行调整。

答案 1 :(得分:-1)

对于哈希,您可以通过.size方法找到大小。

问题不在于此处的大小方法,问题出在ActionController::Parameters不是哈希,

查看ActionController::Parameters

中的第一行
"0"=>{priority"=>"24", "style"=>"three_pictures"}

应该在"

之前错过priority
"0"=>{"priority"=>"24", "style"=>"three_pictures"}

.size method之后应该正常工作