我有一个这样的表格:
= form_tag item_path(@item) do
# some inputs
这提供以下HTML:
<form method="post" action="/items/1" accept-charset="UTF-8">
<!-- some inputs -->
</form>
当我提交时 - 我收到以下错误:
No route matches [POST] "/items/1"
然而,当我将SimpleForm用于同一个项目时 - HTML几乎相同并且有效:
# code:
= simple_form_for @item do |f|
...
# output:
<form id="edit_item_1" novalidate="novalidate" method="post" action="/items/1" accept-charset="UTF-8">
...
你看到我的代码中有任何错误吗?
如何确保我的form_tag向项目更新方法提交参数?
答案 0 :(得分:4)
我不确定为什么simple_form_for有效。但通常Rails form_tag方法使用http方法POST生成表单。
<form method="post"
所以在你的情况下,如果你想提交表格来更新方法,那么http方法应该是PUT。您可以在rails form_tag中显式指定http方法。
form_tag item_path(@item), :method => :put do |f|
通常人们总是会准备form_for而不是form_tag,他们会重复使用表单模板进行创建和更新。因为form_for将根据记录状态设置正确的http方法。如果记录是新的,它会将http方法设置为POST,否则为PUT。
答案 1 :(得分:0)
您是否在routes.rb文件中定义了路径?
resources :items, only: :create
或post "/items/:id" => "items#create"
我建议第一个