その他
    ホーム技術発信DoRubyimage_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枚のボタン画像のなかで、押下位置により動作を変えたいといった場合には、使えるのかもしれません。