4

私は現在、Rails 3.2 アプリケーションを Rails 4 に更新していて、Rails が更新用の主要な HTTP 動詞として PATCH を使用しているという問題に遭遇しました。ユーザーが注文を作成するために使用できるフォームがあります。このフォームはモデル「temporders」を使用しています。ユーザーがフォームを送信すると、/orders/new にリダイレクトされ、そこで最初のフォームを確認して確認できます。Orders#new は、「@order = Temporder.find session[:temporder]」を使用して、確認フォームのデータを取得します。そのフォームは、「/orders」への POST リクエストとして送信する必要があります。「注文」は安らかなリソースとして宣言されています。

orders_path          GET     /orders(.:format)           orders#index
                     POST    /orders(.:format)           orders#create
new_order_path       GET     /orders/new(.:format)       orders#new
edit_order_path      GET     /orders/:id/edit(.:format)  orders#edit
order_path           GET     /orders/:id(.:format)       orders#show
                     PATCH   /orders/:id(.:format)       orders#update
                     PUT     /orders/:id(.:format)       orders#update
                     DELETE  /orders/:id(.:format)       orders#destroy

<%= form_for @order, :as => :order, :url => orders_path, :html => {:multipart => true} do |f| -%>

ただし、フォームを送信すると、Rails で「[PATCH] "/orders" に一致するルートがありません」というエラーが生成され、"method: :post" を追加しようとしましたが、役に立ちませんでした。Rails 4 は、既存の「temporder」オブジェクトからデータを取得し、POST の代わりに PATCH を使用するため、これが既存の注文オブジェクトの更新フォームであると想定していると思われます。質問: このフォームに POST メソッドを強制するにはどうすればよいですか?

4

1 に答える 1

4

問題が見つかりました。間違った/古いマニュアルで HTTP メソッドを設定するための構文を調べていました。<%= form_for @order, :as => :order, :url => orders_path, :html => {:multipart => true, :method => :post} do |f| である必要があります。-%>

于 2013-09-23T08:58:39.207 に答える