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
相关产品推荐
相关产品推荐

