无法使用滑轨5

时间:2018-07-18 16:18:37

标签: ruby ruby-on-rails-5

我有一个方法,该方法从请求中获取参数,并对现有数据进行排序,不涉及保存,这是一个方法:

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!是否是在此使用的正确方法。

我应该使用哪种方法?

1 个答案:

答案 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