我最近遇到了这个弃用警告
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
然后我使用length
和count
尝试了相同的操作,这会产生相同的警告。这将是一个什么样的工作? .keys.length
是有效的,但这是正确的做法,还是我错过了什么?
答案 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
之后应该正常工作