1个参数在创建时未保存



我有一个'parent_id',它作为参数成功地传递到表单页面("Create Child"(中:

<li><%= link_to "Create Child", new_block_path(:parent_id => @block.id)%></li>

记录参数给出:

Started GET "/blocks/new?parent_id=7" for ::1 at 2022-10-31 22:01:05 +0000
Processing by BlocksController#new as HTML
Parameters: {"parent_id"=>"7"}

然后我有一个表单,它在这里调用create方法:

def create
@block = Block.new(block_params)
if @block.save
redirect_to @block
else
render :new, status: :unprocessable_entity
end
end

使用这些block_params

private 
def block_params
params.require(:block).permit(:title, :body, :parent_id)
end
end

但是当我调用create函数时,只存在:title和:body。

打印参数显示:

Started POST "/blocks" for ::1 at 2022-10-31 22:01:17 +0000
Processing by BlocksController#create as TURBO_STREAM
Parameters: {"authenticity_token"=>"[FILTERED]", 
"block"=>{"title"=>"this is a child of block 7", 
"body"=>"this is a child of block 7"}, "commit"=>"Create Block"}

Filtered显示:title:body被正确允许,但parent_id的URL参数刚刚消失。

导轨状态为:";提交的表单数据与捕获的路由参数"-我就是解决不了这个问题。parent_id参数在加载表单时应该存在,但在提交表单时会消失。

有两个操作,newcreate,您可以认为它们是分开的。

因此,new中的参数在create中不会自动可用(在您的情况下是parent_id(,您必须显式传递这些参数。

您只需在表单中添加一个隐藏的输入即可通过parent_id:

<%= form_with model: @block do |f| %>
<%= f.hidden_field :paren_id, value: params[:parent_id] %>
<%= f.text_field :title %>
<%= f.text_field :body %>
<% end %>

最新更新