4

我有这样的表格:

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

4

2 回答 2

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 else PUT。

于 2013-01-23T09:41:14.283 回答
0

您是否在 routes.rb 文件中定义了路径?

resources :items, only: :create

或者post "/items/:id" => "items#create"

我建议第一个

于 2013-01-23T09:13:02.363 回答