【Rails】image_tag完全理解。画像を表示する方法や使い方を実例で解説|id, class, alt属性の設定、リンク設置、サイズ指定・変更、ホバー時の画像切り替え方法

rails-prograshi(プロぐらし)-kv Rails
記事内に広告が含まれていることがあります。

Railsのerbファイルで画像を表示するにはimage_tagを使います。

image_tagを使うときに、id名やclass名の指定をすることはもちろんできますが、それ以外にも表示する画像のサイズを指定したり、ホバーやクリック時のイベントを設定することもできます。

ここでは便利なimage_tagの使い方を解説してます。


image_tagの使い方

基本構文

image_tagの基本構文は次のようになっています。

<%= image_tag( '画像ファイルのパス', [, オプション or HTML属性 or イベント属性] ) %>

第1引数で画像のファイルパスを指定することで、指定した画像をimgタグとして表示することができます。

第2引数以降で、表示サイズの指定などのオプションや、HTML属性、イベント属性を指定できます。

カッコの省略

image_tag単体で使用する場合はカッコを省略することができます。

<%= image_tag '画像ファイルのパス', [, オプション or HTML属性 or イベント属性] %>


ファイルパスの指定方法

Railsには主な画像の保存先として次の2つがあります。そして、それぞれでimage_tagでの呼び出し方が異なります。

  1. app>assets>imgaes配下
  2. public配下
保存先呼び出し方実例
app>assets>imgaes配下ファイルパス冒頭にスラッシュをつけないimage_tag ‘hills.jpg’
public配下〃 にスラッシュをつけるimage_tag ‘/hills.jpg’

app>assets>images と publicの違い

ルート直下のpublicディレクトリは公開用のリソースを配置する場所です。ファビコン画像やrobots.txtなど常に公開し続ける必要があるリソースを配置します。

これに対して、app > assets配下はRailsで処理対象のファイルを保存する場所です。画像ファイルに関しても基本的に、app>assets>images配下に配置していれば問題ありません。


画像のみを呼び出す

app > assets > images配下の場合

画像パスのみを指定することができます。

<%= image_tag 'hills.jpg' %> 

 ↓ コンパイル後

<img src="/assets/hills-81ad00284717a925504e4c5278a679b8472bdc248f6d128e9da218b15b38db1b.jpg">
tips

webpackを使ってコンパイルしている場合は、assets配下の画像にはハッシュ値がつきます。

webpackの使用はRails6からデフォルトになっています。


public配下の場合

public配下に設置した画像はコンパイルせずそのまま出力されます。

<%= image_tag '/images/sea.jpg' %> 

 ↓ コンパイル後

<img src="/images/sea.jpg">


image_tagで指定できるHTML属性の一覧

image_tagには、以下のHTML属性を指定することができます。

HTML属性説明
:src画像ファイルのパス
:altalt属性
:longdesc画像の説明文章のパス
:name画像の名前
:ismapサーバサイド・イメージマップを使用
:usemap画像に対応させるイメージマップ
:align画像とテキストの配置
:width画像の幅
:height画像の高さ
:id要素固有の識別子
:class要素を分類するクラス名
:title要素の補足情報
:style要素の補足情報
:dir表記方向
:lang基本言語

HTML属性の指定方法は、シンボルの識別子: 値 とします。複数ある場合はカンマでつなぎます。

また、上記で定義している属性以外も、属性名: 値とすればコンパイル後にその内容をHTMLタグに表示することができます。

<%= image_tag 'hills.jpg', test: 'これはテストです'  %> 

 ↓ コンパイル後

<img test="これはテストです" src="/assets/hills-81ad00284717a925504e4c5278a679b8472bdc248f6d128e9da218b15b38db1b.jpg">


tips

image_tagでHTML属性やオプションなどを指定するときに、:シンボルの識別子 => 値 とする場合と、 シンボルの識別子: 値 と記述する場合があります。

これはどちらも同じ内容を表しています。省略形である後者を使うと記述がシンプルになります。

詳細については下記をご参考ください。

【Ruby・Rails】ハッシュ(連想配列)の省略した書き方|シンボルと文字列の違い


id名とclass名の指定

コンパイル後の画像にHTML属性としてid名やclass名を指定することができます。

id: 'id名'class: 'class名' として指定します。

<%= image_tag 'hills.jpg', id: 'hills-image', class: 'test-image' %>

 ↓ コンパイル後

<img id="hills-image" class="test-image" src="/assets/hills-81ad00284717a925504e4c5278a679b8472bdc248f6d128e9da218b15b38db1b.jpg">


alt属性の指定

コンパイル後の画像にalt属性を指定することができます。

alt: 'altの内容'として指定します。

<%= image_tag 'hills.jpg', alt: '丘の画像' %>

 ↓ コンパイル後

<img alt="丘の画像" src="/assets/hills-81ad00284717a925504e4c5278a679b8472bdc248f6d128e9da218b15b38db1b.jpg">




画像の表示サイズを指定する方法

:sizeオプション

:sizeオプションを使うと表示する画像のサイズを指定することができます。

<%= image_tag( '画像ファイルのパス', size: '横幅x高さ' %>

横幅と高さは数値のみで指定します。(単位のpxは省略します。つけるとサイズが反映されません)

コンパイル後にwidth属性とheight属性が指定された状態で表示されます。


実例

<%= image_tag 'hills.jpg', size: '300x200' %> 

 ↓ コンパイル後

<img src="/assets/hills-81ad00284717a925504e4c5278a679b8472bdc248f6d128e9da218b15b38db1b.jpg" width="300" height="200">



画像のサイズを%で指定する方法

画像のサイズをpxではなく%で指定する場合sizeオプションは使えません。主な対応策としては以下の2つがあります。

  1. widthとheight属性を使う
  2. classやid属性を指定して、スタイルシートで指定する

widthとheight属性で指定する場合は以下のようになります。

<%= image_tag( '画像ファイルのパス', size: '横幅x高さ' %>

実例

<%= image_tag 'hills.jpg', width: '50%', height: '50%'  %> 

 ↓ コンパイル後

<img width="50%" height="50%" src="/assets/hills-81ad00284717a925504e4c5278a679b8472bdc248f6d128e9da218b15b38db1b.jpg">



画像にリンクを設置する

link_toの第1引数(アンカーテキスト)にimage_tagを指定することで、画像をリンクにすることができます。

<%= link_to リンクテキスト, パス %>

もしくはカッコをつけても使えます。

<%= link_to (リンクテキスト, パス) %>

(参考)Railsドキュメント link_to


画像をリンクにする

<%= link_to image_tag( ファイパル ), リンク先のパス %>

link_toタグの中でimage_tagを使う場合は、image_tagにカッコが必須となります。


実例

<%= link_to image_tag('hills.jpg'), '/' %>

 ↓ コンパイル後

<a href="/">
  <img src="/assets/hills-81ad00284717a925504e4c5278a679b8472bdc248f6d128e9da218b15b38db1b.jpg">
</a>



利用可能なイベント属性の一覧

オプションでイベント属性を指定すると、イベントに合った処理を実行することができます。

イベント属性説明
:onclickクリックされた時
:ondblclickダブルクリックされた時
:onmousedownマウスのボタンが押し下げられた時
:onmouseupマウスのボタンが離された時
:onmouseoverカーソルが重なった時
:onmousemoveカーソルが移動した時
:onmouseoutカーソルが離れた時
:onkeypressキーが押されて離された時
:onkeydownキーが押し下げられた時
:onkeyupキーが離された時
:onfocusフォーカスされた時
:onblurフォーカスを失った時
:onselect入力欄のテキストが選択された時
:onchangeフォーカスを失う際に値が変化し

ホバー時に画像を切り替える

:onmouseoverイベントとonmouseoutイベントを使うとホバー時に画像を切り替えることができます。

<%= image_tag 'ファイルパス', onmouseover: "this.src=`ホバー時の画像パス`", onmouseout: "this.src=`ホバーを外したときの画像パス`" %>
注意点

イベントで指定する画像は、"this.src=`画像パス`"とする必要があります。

画像パスはバッククオート(shift + @)で囲みます。

ダブルクオテーションの中で変数やrubyの処理を呼び出したい場合は #{変数 や rubyの処理}とします。

tips

属性の中で、assets > images配下の画像パスを呼び出す場合は、asset_pathメソッドを使います。

asset_path('assets>images配下のファイルパス')

※パスの指定時にimagesは不要です。


実例

<%= image_tag 'hills.jpg', onmouseover: "this.src=`#{asset_path('sea.jpg')}`", onmouseout: "this.src=`#{asset_path('hills.jpg')}`" %> 

 ↓ コンパイル後

<img 
  onmouseover="this.src=`/assets/sea-7bf16b0ea4f043061c5b3d1b8ee4d00e1205b78b5fafd339ddfdafd7cfb6e29d.jpg`"
  onmouseout="this.src=`/assets/hills-81ad00284717a925504e4c5278a679b8472bdc248f6d128e9da218b15b38db1b.jpg`"
  src="/assets/sea-7bf16b0ea4f043061c5b3d1b8ee4d00e1205b78b5fafd339ddfdafd7cfb6e29d.jpg"
>

参考リンク

RailsでDBのデータに画像を添付するには、Active Storageを使うと便利です。

タイトルとURLをコピーしました