ruby-on-rails – 递归/树状强参数?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 递归/树状强参数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法在Rails 4中为树结构指定任意深度强参数?例如,我如何指定如下内容
{
  "node": {
    "name": "parent","nodes": [
      { "name": "child1","nodes": []},{ "name": "child2","nodes": [
        {"name": "grandchild","nodes": []}
      ]}
    ]
  }
}

允许每个节点都有一个name属性和一个nodes属性

解决方法

可能有一个更清洁的解决方案来解决这个问题,但这是我目前的工作.一般的想法是计算我的嵌套的深度,然后根据该数字自动生成正确的嵌套哈希.所以按照你的例子:
def count_levels(node_params)
   if !node_params[:nodes].nil?
    max = 0
    node_params[:node_parameters].each do |child_params|
      count = count_levels(child_params[1])
      max = count if count > max
    end
    return max + 1
  else
    return 0
  end
end

def node_params
  node_attributes_base = [:id,:name]
  nodes = []
  (1..count_levels(params[:node])).each do |val|
    nodes = node_attributes_base + [node_attributes: nodes]
  end
  params.require(:node).permit(:id,:name,node_attributes: nodes)
end

(上面的例子可以清理得更多,因为它是基于我的代码,其中顶层没有相同的参数.我离开它,因为它在我的系统上工作.)

猜你在找的Ruby相关文章