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

