You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置ActionController::Parameters许可深度递归结构

Rails API递归分类参数许可方案

1. 指定最大深度(如8层)

不用手动硬编码多层嵌套,写个递归辅助方法生成对应深度的permit规则即可:

# 控制器内的辅助方法
def recursive_permit_rules(depth)
  depth <= 1 ? [:name] : [:name, subcategories: recursive_permit_rules(depth - 1)]
end

# 参数许可逻辑
def category_params
  params.require(:category).permit(
    :name,
    subcategories: recursive_permit_rules(7)
  ).to_h
end

这里传入7是因为外层的分类是第1级,subcategories递归7次后就能支持到第8级分类,按需调整数字即可。

2. 允许任意深度输入

通过递归引用的permit规则实现,让Rails自动处理所有层级的嵌套:

def category_params
  params.require(:category).permit(*permit_rules).to_h
end

private

def permit_rules
  [:name, subcategories: permit_rules]
end

注意事项:

  • 仅在前端可信的场景下使用,防止恶意提交超深层嵌套数据引发性能问题
  • 如果有层级限制需求,优先选择第一种指定最大深度的方案

内容的提问来源于stack exchange,提问作者Zack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 17:12:34