我有一个方法,该方法从请求中获取参数,并对现有数据进行排序,不涉及保存,这是一个方法:
def forming_position
nodes = params[:nodes_list].permit!
nodes.each do |node|
recursive_sorting node
end
end
这里与方法recursive_sorting
相关:
def recursive_sorting(node, parent = nil)
position = node[0]
value = node[1]
......
end
我遇到的问题是.permit!
是我使用错误或未使用正确方法。
这是我实际的params[:nodes_list]
:
params[:nodes_list]
=> <ActionController::Parameters {"1"=><ActionController::Parameters {"id"=>"3"} permitted: true>, "2"=><ActionController::Parameters {"id"=>"2"} permitted: true>, "3"=><ActionController::Parameters {"id"=>"1"} permitted: true>} permitted: true>
这里是分配的nodes
值:
nodes
=> <ActionController::Parameters {"1"=><ActionController::Parameters {"id"=>"3"} permitted: true>, "2"=><ActionController::Parameters {"id"=>"2"} permitted: true>, "3"=><ActionController::Parameters {"id"=>"1"} permitted: true>} permitted: true>
nodes == params[:nodes_list]
=> true
当我在forming_positions
方法内部时,在每个使用node
作为内部循环变量的方法中。我检查它的价值。是:
node
=> "1"
但是当我检查nodes.first
元素时,它为我提供了正确的值:
nodes.first
=> ["1", <ActionController::Parameters {"id"=>"3"} permitted: true>]
这是怎么回事?
我的recursive_sorting
方法中需要键和值,为什么节点只作为键值传递。而我该怎么做才能使两者都不确定,permit!
是否是在此使用的正确方法。
我应该使用哪种方法?
答案 0 :(得分:2)
原因是params[:nodes_list]
实际上是一个散列,而方法each
的散列处理方式则不同:
{ a: 1, b: 2 }.each do |key, value|
p "#{key} => #{value}"
end
打印:
"a => 1"
"b => 2"
这就是为什么您需要修改代码的原因:
def forming_position
nodes = params[:nodes_list].permit!
nodes.each do |position, value|
recursive_sorting(position, value)
end
end
def recursive_sorting(position, value, parent = nil)
......
end
或者:
def forming_position
nodes = params[:nodes_list].permit!
nodes.each do |position, value|
recursive_sorting([position, value])
end
end
或者:
def forming_position
nodes = params[:nodes_list].permit!
nodes.to_a.each do |node|
recursive_sorting(node)
end
end