我有一個'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"}
過濾顯示:title
并被:body
正確允許,但 URL 引數parent_id
剛剛消失。
rails 指南指出:“提交的表單資料與捕獲的路由引數一起放入 params 哈希中” - 我無法解決這個問題。parent_id 引數在加載表單時應該存在,但在提交時它消失了。
uj5u.com熱心網友回復:
有兩個動作,new
和create
,你可以認為它們是分開的。
所以引數 fromnew
不會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 %>
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/524647.html
標籤:轨道上的红宝石
上一篇:如何在Rails中創建淺層路線?