有没有办法在Rails 4中为树结构指定任意深度强参数?例如,我如何指定如下内容:
{ "node": { "name": "parent","nodes": [ { "name": "child1","nodes": []},{ "name": "child2","nodes": [ {"name": "grandchild","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
(上面的例子可以清理得更多,因为它是基于我的代码,其中顶层没有相同的参数.我离开它,因为它在我的系统上工作.)