Railsのutf8パラメータとcommitパラメータ
Railsで検索フォームみたいなのを作るとき、RailsGuide通りにすると
<%= form_tag("/search", :method => "get") do %> <%= label_tag(:q, "Search for:") %> <%= text_field_tag(:q) %> <%= submit_tag("Search") %> <% end %>
↑みたいなコードになり、フォームから遷移するURLに
「/search?utf8=✓&q=&commit=Search」
のようにutf8パラメータとcommitパラメータがつきます。
まぁ別に困らないのだけど、よくわらないパラメータがURLに追加されるのはいまいち。。
ちょっと気になったので、それぞれ調べてみました。
・utf8パラメータ
出力自体は、↓のutf8_enforcer_tagで行われています。
https://github.com/rails/rails/blob/3-2-stable/actionpack/lib/action_view/helpers/form_tag_helper.rb#L607
helperでoverrideしろと書いてあるので、気になる場合は、overrideすればよいようです。
ただし、戻り値をなくしてしまうと、このメソッドの戻り値に対してさらにタグを追加するのでエラーが発生してしまいます。
空文字を返しておけばok。
もうちょっと調べてみると、このパラメータは、古いIE対策にセットされたものようです。
http://stackoverflow.com/questions/4104474/rails-3-utf-8-query-string-showing-up-in-url
IE5以前は、accept_charsetが無視されてしまうとかなんとか。
submitするときに、パラメータに強制的にunicode文字を含めることで対応しています。
元々は雪だるまだったのだけど、現状のRailsではチェックマークになったみたいですね。
・commitパラメータ
どのボタンが押さたのか、サーバ側で判断できるように、デフォルトでついているようです。
(params[:commit] みたいな感じで)
submit_tagから出力されるHTMLがデフォルトで下記のようになっているので、commitパラメータが付加されます。
<input name="commit" type="submit" value="Save changes">
ソースは、↓のようになっているので
https://github.com/rails/rails/blob/3-2-stable/actionpack/lib/action_view/helpers/form_tag_helper.rb#L428
submit_tag のoptionとして :name=nil を渡せばok
<%= submit_tag "Search", :name => nil %>
とすれば、inputタグのname属性が出力されなくなります。