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_tag の代わりに form_for を用意し、フォーム テンプレートを再利用して作成と更新を行います。form_for はレコードのステータスに基づいて正しい http メソッドを設定するためです。レコードが新しい場合は、http メソッドを POST に設定するか、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 に答える