0

コンソールでは正しいように見えるルートに問題がありますが、サーバーで使用するとルーティング エラーが発生します。このケースは、「編集」と「更新」のペアに似ています。GET 'messages/25/followup' を呼び出すと、messages#followup にルーティングされますが、POST を含む同じ URL は、messages#followup_send にルーティングされる必要があります。私のroutes.rbファイルには

get "messages/:id/followup", :to => "messages#followup"
match "messages/:id/followup", :to => "messages#followup_send", :via => :post

ルートを表示すると

ruby-1.9.2-p0 :092 > puts fu
GET  /messages/:id/followup(.:format)  {:controller=>"messages", :action=>"followup"}
POST /messages/:id/followup(.:format)  {:controller=>"messages", :action=>"followup_send"}

コンソールでテストすると、

ruby-1.9.2-p0 :088 > r.recognize_path "/messages/54/followup", :method=>'POST'
=> {:controller=>"messages", :action=>"followup_send", :id=>"54"} 

フォーム内のコードは

<form id="edit_message_42" class="edit_message" method="post" action="/messages/42/followup?method=post" accept-charset="UTF-8">
...
<input type="submit" value="Send" name="commit">

ただし、ボタンをクリックするとログに記録されます

Started POST "/messages/42/followup?method=post" for 127.0.0.1 at 2012-06-27 13:54:48 +0100
ActionController::RoutingError (No route matches "/messages/42/followup")

URL を手動で入力した場合も同じことが起こります (「method=post」を含む)。ここでは、GET-POST に依存するのではなく、別の名前 (/messages/42/send_followup など) を使用してこれを回避します。違いはありますが、ここで何が起こっているのかを理解したいと思います。

アイデアをありがとう。

4

0 に答える 0