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

Rails Turbo Stream追加的嵌套表单字段未被控制器参数允许

解决Rails嵌套属性随机索引无法通过强参数校验的问题

核心解决方案

修改控制器中gift_params方法对links_attributes的许可规则,使用通配符:*匹配哈希形式嵌套属性的任意键:

def gift_params
  params.require(:gift).permit(
    :name,
    links_attributes: { :* => [:id, :site, :url] }
  )
end

问题原因说明

  • 你使用SecureRandom.hex(8)作为fields_for的index,导致提交的links_attributes是哈希结构(键为随机字符串),而非Rails嵌套属性默认的数组结构。
  • 原参数许可写法links_attributes: [:id, :site, :url]仅适配数组形式的嵌套属性(即links_attributes是包含多个哈希的数组),无法识别哈希形式下的非数字键,因此只有默认的0索引项通过校验。
  • 通配符:*可以匹配links_attributes哈希中的任意键,确保所有随机索引对应的嵌套属性都能通过强参数校验。

验证效果

修改后重新提交表单,gift_params将完整保留所有随机索引的links属性,与原始params中的结构一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 19:33:27