画像ファイルにリンクを貼るのに3時間
Ruby on Railsでアプリケーションを作っていたら、画像ファイルへのURLをどうやって書いたらよいか分からなくて、悶え苦しんでいました。
<img src="/images/cleam_clenzer.gif"/>
って書いてしまうと、アプリケーションをドメイン直下じゃないURLに置いたときにダメになってしまう。
かといって
<img src="cleam_clenzer.gif"/>
って書くと、いろんなURLから参照できなくなって困る。
「image_tag」ヘルパーメソッド
2時間ほどソース読んだり試行錯誤したり検索したり絶望したりハイクに逃げたりした結果、「image_tag」っていうヘルパーメソッドがあることを知りました。
http://api.rubyonrails.org/classes/ActionView/Helpers/AssetTagHelper.html#M001031
<%= image_tag( 'cleam_clenzer.gif' ) %>
って書くと
<img alt="Cleam_clenzer" src="/images/cleam_clenzer.gif?1203782414" />
このように変換されるみたい。
2つめの引数にタグの属性をハッシュで渡すと、そのまんまHTMLに変換してくれました。
<%= image_tag( 'cleam_clenzer.gif', { :alt => 'クリームクレンザー', :border => '0' } ) %>
↓
<img alt="クリームクレンザー" border="0" src="/images/cleam_clenzer.gif" />
「link_to」ヘルパーメソッド
無事に画像を表示することができました。こんどはこの画像にリンクをつけて、これをクリックしたら他のページに遷移するようにしたいです。
テキストにリンクを貼るときは、「link_to」というヘルパーメソッドを使うみたいですが、マニュアルを見る限り、テキストへのリンクしかできないような気がします。
http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#M000913
<%= link_to( 'クリームクレンザー', { :controller => 'unilever' } ) %>
↓
<a href="/unilever">クリームクレンザー</a>
テキストじゃなく画像にリンク設定するにはどうしたらいいんだろう。
1時間ほど試行錯誤して上手くいかなくてイヤになって傍らにあったSBRを読んでリンゴォの台詞にシビれたりした挙句、link_toの引数にimage_tagをそのまんま渡せばよいということがわかりました。
<%= link_to( image_tag( 'cleam_clenzer.gif' ), { :controller => 'unilever' } ) %>
↓
<a href="/unilever"><img alt="Cleam_clenzer" src="/images/cleam_clenzer.gif" /></a>
思ったこと
一行書くのに3時間もかかったことに絶望した。
viewの中で使えるヘルパーメソッドは「ActionView::Helpers」パッケージの中にまとまっているんだと思う。
/usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_view/helpers/ ディレクトリを見れば何かしら手がかりが掴めるんじゃないかしら。