ホーム DoRuby image_submit_tagとsubmit_tagのパラメータの違いについて

image_submit_tagとsubmit_tagのパラメータの違いについて

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

初めまして、中西です。

今年社会人になったばかりの新人です。

今回は、自分が少し詰まった、image_submit_tagとsubmit_tagの挙動の違いについて紹介します。

環境

Rails 4.1.4

Ruby 2.1.2

image_submit_tagとsubmit_tagの違い

form_tag等でくくった中で、submitボタンを複数配置し、押下するボタンによって処理を変えたい場合、

アクションを1つしか設定できないことから、:nameのオプションをつけて、アクション内でパラメータにより処理を分けるといったことができます。

このとき、submit_tagとimage_submit_tagで渡されるパラメータに違いが生じます。

image_submit_tagとsubmit_tagの例

例えば下記のようなsubmitボタンを書いたとします。

view
= submit_tag 'HOGE', :name => 'hoge'

= image_submit_tag 'image/huga.png', :name => 'huga'

それぞれのボタンを押下した時に、期待するパラメータはparams[:hoge]とparams[:huga]です。

しかし、実際のパラメータの中身は下記のようになります。

paramsの中
"hoge"  => "HOGE"

"huga.x" => "12", "huga.y" => "10"

上記のように、image_submit_tagの場合、params[:huga]ではなく、

params[“huga.x”]とparams[“huga.y”]という2つのパラメータとなります。

どうも、ボタンの画像の左上を(x,y)=(0,0)として、横軸にx座標、縦軸にy座標となっており、

ピクセル単位でボタンの押下位置のx,y座標それぞれのパラメーターとして飛ぶようです。

まとめ

image_submit_tagで:nameのオプションを使う場合には、パラメータには十分注意しないといけないようです。

しかし、image_submit_tagも、1枚のボタン画像のなかで、押下位置により動作を変えたいといった場合には、使えるのかもしれません。

記事を共有

最近人気な記事