HTTP POST ≒ request.post?

例えば以下のようにlink_toメソッドを呼び出してリンクを作成すると、HTTP的にはPOST扱いとなる。

link_to("削除", {}, :confirm => "削除する?", :delete)

HTTPリクエストは以下のように発行される。

POST / HTTP/1.1
(中略)
_method=delete

で、このリクエストをコントローラで判断してみる。

  request.post? #=> false
  request.delete? #=> true

request.post?がfalseになるのはかなり違和感がある。
requestはHTTP Requestを表現するオブジェクトなのだから個人的にはrequest.post?はHTTP POSTだったら常にtrueであるべきとは思うんだけどな。*1


まぁたぶんRESTとかActiveResourceとかに関連してくる話なのだと思う。
DHHがRailsConf2006で語っていた気がするけどまだ詳細は押さえていなかったり。

*1:method.post? method.delete?とかだったらいいんだけど…。