form タグにGET/POST以外のHTTPメソッドを指定する

フィヨルドブートキャンプの課題としてSinatraを使ったメモアプリの開発に取り組んでいます。 CRUD処理の実装でform タグを使ってHTTPメソッドのdeletepatch を送信する方法を調べました。

結論

_method パラメータを使いHTTPメソッドを指定する

実装例

  • form タグのメソッドはpost を指定
  • type="hidden" を指定したinput タグを追加
    • value 属性にHTTPメソッドを指定
    • name 属性に_method を指定
  • type="hidden" を指定したinput タグは非表示になる

例) /memos/@memo[:id] パスにdelete メソッドを送りたい

<form action="/memos/<%= @memo[:id] %>" method="post">
    <input type="hidden" name="_method" value="delete">
    <input type="submit" value="削除">
</form>

注意点

モジュラースタイルで記述する場合は別途method_override が必要になる

参照

[html/css] httpのフォームでDELETEやPUTのメソッドを送る方法 - 脳汁portal

Sinatra: README (Japanese)