加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 21:11:32 所属栏目:百科 来源:网络整理
导读:有没有办法在Rails 4中为树结构指定任意深度强参数?例如,我如何指定如下内容: { "node": { "name": "parent","nodes": [ { "name": "child1","nodes": []},{ "name": "child2","nodes": [ {"name": "grandchild","nodes": []} ]} ] }} 允许每个节点都有一
有没有办法在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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读