Rails:编辑表单发送到postroute而不是补丁



在我提交编辑表单后,它将路由到[POST]"users/1/moves/1/inventory_lists/2";代替我的路线:user_move_inventory_list_path
PATCH
/users/:user_id/moves/:move_id/inventory_lists/:id(.:format(
inventory_lists#更新

<%= form_for(@list, url: user_move_inventory_list_url(@user, @move), method: :patch) do |f| %>
<h3>Edit your list by updating Items</h3>
<p>Any items not in your inventory list will incure additional fees</p>
<% @list.items.each do |item| %>
<%= f.fields_for item, Item.find_by(id: item.id) do |item_attributes| %>
<div>
<%= item_attributes.label :name, "Item Name:"%>
<%= item_attributes.text_field :name, 'name' => "inventory_list[][item][name]" %>
</div>
<div>
<%= item_attributes.label :room, "Room Item Belongs to:" %>
<%= item_attributes.text_field :room, 'name' => "inventory_list[][item][room]" %>
</div>
<div>
<%= item_attributes.label :weight, "Item Weight:" %>
<%= item_attributes.number_field :weight, 'name' => "inventory_list[][item][weight]" %>
</div>
<br><br>
<% end %>
<% end %>
<h3>Add Items</h3>
<div id="row1" class="row">
<%= f.fields_for :item, Item.new do |item_attributes| %>
<div>
<%= item_attributes.label :name, "Item Name:" %>
<%= item_attributes.text_field :name %>
</div>
<div>
<%= item_attributes.label :room, "Room Item Belongs to:" %>
<%= item_attributes.text_field :room %>
</div>
<div>
<%= item_attributes.label :weight, "Item Weight:" %>
<%= item_attributes.number_field :weight %>
</div>
<% end %>
</div>
<div>
<input type="button" id="btnAdd" value="Add Another Item" />
<input type="button" id="btnDel" value="Remove Item" />
</div>

<%= f.submit 'Update List' %>

<%结束%>

Hey–我在这里看到的一件事是,您有user_move_inventory_list_url,而不是更可取的user_move_inventory_list_path,尤其是对于内部用例。这很可能是你的问题的根源。

您几乎应该始终使用_path变体,除非您为外部用例提供链接,可能是从共享的twitter URL或您通过邮件发送的时事通讯URL引用您网站上的页面,等等。

Rails应该自动包含一个隐藏的html字段来覆盖HTTP方法。

您可以在此处阅读更多内容:https://guides.rubyonrails.org/form_helpers.html#how-使用补丁放入或删除方法的表格是否有效问号

最新更新