Ruby on Rails - submit_tag で付加される commit, utf8 パラメータ!

Updated:


Ruby on Rails で submit_tag メソッドを使用して submit タグを生成すると、Submit 後の URL に自分の意識していないパラメータが勝手に付加されます。 utf8commit です。

以下、現象と対策方法についての備忘録です。

0. 前提条件

  • Rails 4.1.0 での作業を想定。

1. 現象確認

例えば、Rails の HTML 生成部分(erb ファイル)を以下のようにしたとする。

<%= form_tag({controller: "hoge", action: "fuga" }, {method: "get"}) do %>

  <!-- セレクトボックス、テキストボックス、ラジオボタン -->

  <%= submit_tag("検 索") %>

<% end %>

すると、生成後の HTML は以下のようになる。

<form accept-charset="UTF-8" action="/jmaxml" method="get">

  <!-- セレクトボックス、テキストボックス、ラジオボタン -->

  <input name="commit" type="submit" value="検 索" />

</form>

そして、ボタン押下後の URL は以下のようになる。

http://<・・・>/hoge/fuga?utf8=✓&commit=検 索

2. commit パラメータについて

2-1. 原因

HTML の name="commit" や URL の commit=検 索 は、押下されたボタンをサーバ側で判断できるようにデフォルトで付加される機能のようだ。

2-2. 対策

1つのフォームで複数のボタンを使用しないのなら区別する必要もない。その場合は、 name 属性に nil を指定すればよい。
区別する必要があるのなら、明示的に name 属性を指定すればよい。

<%= form_tag({controller: "hoge", action: "fuga" }, {method: "get"}) do %>

  <!-- セレクトボックス、テキストボックス、ラジオボタン -->

  <%= submit_tag("検 索", name: nil) %>

<% end %>

3. utf8 パラメータについて

3-1. 原因

古い Internet Explorer 対策のためにデフォルトで付加されるパラメータのようだ。

3-2. 対策

“config/intializers” ディレクトリ配下に適当な名前でファイルを作成し、以下のような内容を記述すればよいようだ。

File: config/initializers/utf8_enforcer_tag.rb

1
2
3
4
5
6
7
8
9
module ActionView
  module Helpers
    module FormTagHelper
      def utf8_enforcer_tag
        "".html_safe
      end
    end
  end
end

html_safe は authenticity_token エラー防止のため)

4. 動作確認

Rails を再起動して、生成される HTML を確認してみる。

<form accept-charset="UTF-8" action="/jmaxml" method="get">

  <!-- セレクトボックス、テキストボックス、ラジオボタン -->

   <input type="submit" value="検 索" />

</form>

Submit 後の URL も確認してみる。 utf8=✓commit=検 索 も無くなったはずである。


これで URL がスッキリしました。

以上。





 

Sponsored Link

 

Comments