Rails: link_to で POST したら Request too long と言われたあなたへ

こんにちは、鈴木です。

 

リンククリック時に POST で送信したい

Rails の link_to で POST としてリクエストを送信したい場合、method オプションで post を指定すると思います。

GET ではなく POST でリクエストを送りたい動機としては、次のようなものがあると思います。

  • リンク先が POST しか受け付けてくれない。
  • リンク先が POST しか受け付けてくれず、パラメータはリクエスト本文で指定したものだけが受け付けられる。(URL にクエリ文字列として含めても受け付けてくれない)。
  • リクエストパラメータが多すぎで、URL の最大長を超えてしまう。

一つ目の「リンク先が POST しか受け付けれくれない」という場合は link_to の method オプションで post を指定すれば問題ありませんが、残り二つの場合は上手くいきません。

というのも、link_to の method オプションに post を指定したとしても、パラメータは URL に含まれてしまうからです。

 

パラメータはリクエスト本文に含めて POST で送信したい

パラメータをリクエスト本文に含めて POST 送信する必要がある場合は、リンクのクリックイベントをフックして、

  1. 内部的に form 要素を生成する。
  2. パラメータを <input type="hidden"> として form に追加する。
  3. form を submit する。

とする必要があります。

これを手軽に行う方法が無いようなので、jQuery プラグインを作成しました( jquery.post_link.js )。

使い方はコメントに書いていますが、POST で送信したいリンクのクラスに post などと指定しておき、

Javascript でこのようにします。

 

まとめ

検索フォームから一覧表示をする場合、検索結果をブックマークできるように GET で送信することが多いのですが、検索条件が多すぎると URL の最大長を超えてしまい悲しくなる、ということがありました。せっかく対応するのであれば、ということで再利用しやすいように jQuery プラグインとしてまとめました。

 

Comments are closed, but you can leave a trackback: Trackback URL.