我有一个'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参数在加载表单时应该存在,但在提交表单时会消失。
有两个操作,new
和create
,您可以认为它们是分开的。
因此,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 %>