mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

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

[ プログラミング ] [ Rails, Ruby ]

こんばんは。

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

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

0. 前提条件

  • Rails 4.1.0 での作業を想定。

1. 現象確認

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

1
2
3
4
5
6
7
<%= form_tag({controller: "hoge", action: "fuga" }, {method: "get"}) do %>

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

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

<% end %>

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

1
2
3
4
5
6
7
<form accept-charset="UTF-8" action="/jmaxml" method="get">

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

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

</form>

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

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

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

2-1. 原因

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

2-2. 対策

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

1
2
3
4
5
6
7
<%= form_tag({controller: "hoge", action: "fuga" }, {method: "get"}) do %>

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

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

<% end %>

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

3-1. 原因

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

3-2. 対策

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

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 を確認してみる。

1
2
3
4
5
6
7
<form accept-charset="UTF-8" action="/jmaxml" method="get">

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

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

</form>

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


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

以上。

Comments