リア充爆発日記

You don't even know what ria-ju really is.

RailsにJavaScriptのimage_path

erb以外でassets配下の画像を参照するとき、SASSにはimage-pathというナイスなヘルパーがあるのにJSにはない。困る。

こういう誰でも困りそうなことは絶対誰かがなんとかしている。なんとかしていた。
http://dennisreimann.de/blog/referencing-rails-assets-in-coffeescript/

assets/javascripts配下に以下のようなコードを配置する
image_helpers.js.coffee.erb

<%
imgs = {}
Dir.chdir("#{Rails.root}/app/assets/images/") do
  imgs = Dir["**"].inject({}) {|h,f| h.merge! f => image_path(f)}
end
%>

window.image_path = (name) ->
  <%= imgs.to_json %>[name]

名前はなんでもいいけどrubyの処理が入っててかつcoffeescriptで書かれているのでjs.coffee.erbでなければダメ。

これでimage_path()で画像が参照できる!

ちなみにあとから画像を追加したとき、tmp/cache/assetsを消してサーバを再起動しないと読み込まなかったことがあった。そういうものだったけ。

Ruby on Rails環境構築ガイド

Ruby on Rails環境構築ガイド