[英]DEPRECATION WARNING: Method length is deprecated and will be removed in 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
然后我尝试了length
和count
相同的事情,这导致了相同的警告。 这将是一个什么样的工作? .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.