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

Rails创建Block时parent_id参数丢失问题求助

问题分析与解决

问题核心:你通过GET查询参数将parent_id传递到了new页面,但表单提交属于POST请求,查询参数不会自动被包含进POST的表单数据中。Rails指南提及的"路由参数"指的是URL路径中的参数(如/blocks/:id里的:id),而非URL末尾的查询参数,所以create动作自然拿不到这个值。

具体解决步骤

1. 在BlocksController#new中初始化实例时带入parent_id

修改new方法,把URL中的parent_id赋值给@block实例:

def new
  @block = Block.new(parent_id: params[:parent_id])
end

2. 在表单中添加隐藏字段传递parent_id

在new对应的表单模板里,添加一个隐藏字段,让parent_id随表单一起提交:

<%= form_with(model: @block) do |form| %>
  <!-- 现有title、body字段代码 -->
  
  <%= form.hidden_field :parent_id %>
  
  <%= form.submit "Create Block" %>
<% end %>

完成以上修改后,表单提交时parent_id会被包含在block参数组中,结合你已配置的block_params,create动作就能正确接收并使用这个值了。提交后的POST日志会显示类似如下内容:

Parameters: {"authenticity_token"=>"[FILTERED]", "block"=>{"title"=>"this is a child of block 7", "body"=>"this is a child of block 7", "parent_id"=>"7"}, "commit"=>"Create Block"}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:40:44