使用form_tag提交params以更新方法会给出未定义的路由错误

时间:2013-01-23 09:05:56

标签: ruby-on-rails

我有一个这样的表格:

= 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向项目更新方法提交参数?

2 个答案:

答案 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"

我建议第一个