繁体   English   中英

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

[英]ActionController::Parameters deprecation warning: Method size is deprecated and will be removed in Rails 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是有效的,但这是正确的方法,还是我错过了什么?

正如评论中所提到的,你必须将params转换为Hash,因为在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

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

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

问题不在于这里的size方法,问题在于ActionController::Parameters ,它不是hash,


查看ActionController::Parameters中的第一行

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

它应该跟随" priority之前失踪"

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

在此之后.size method应该正常工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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