【Rails】画像ファイルの相対パスと絶対パス【画像が見えない(´・ω・`;)】

先日、
クライアント側でJavaScriptを実行する時にちょぴっとハマった現象。

サンプルではJQueryを使っていますが、JavaScriptでも全く同じ(´・ω・`;)

[route.rb]

resources :hoges do
get :fuga, :on => :collection
end

[View(というかhtml)]

<html>
<head>
<title>yukkurisan</title>
<script src="/javascripts/jquery-1.6.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
  $("div.hoge").eq(0).css("background-image", "url('../images/yukkuri.png')");
});
</script>
</head>
<body>

<div class="hoge">&nbsp;</div>   ・・・・(1)

</body>
</html>


要は、htmlがロードされたら(1)の背景にyukkuri.pngが読み込まれるというだけの処理。


テストしていた時には、

**yukkuri**/hoges/fuga

といつもの通りアクセスし、プログラムに問題がないことを確認していたのですが、
とある静的リンクからたどってきた場合に「画像だけが表示されない」現象に遭遇(´・ω・`;)


なんのせいかすぐはわからなかったのですが、じきに解決。



その理由はというと、、


叩かれたURLが、

**yukkurisan**/hoges/fuga/

となっていたことが原因でした・・orz


つまりです、

この場合、railsにしてみれば、

**yukkurisan**/hoges/fuga も
**yukkurisan**/hoges/fuga/ も

同じルーティングを指すのですが、

viewに書かれたjavascriptからすると、このルーティングの違いはとても重要で、
特に相対パスの場合は、「今いる階層からみたパス」なので、/ のあるなしは非常に重要なのです。。


../images/yukkuri.png は、
一つ上の階層のimagesディレクトリの(ry
というわけなので、

/ なしの場合、hogesの並びのimagesディレクトリ以下のyukkuri.png
/ ありの場合、fugaの並びのimagesディレクトリ以下のyukkuri.png

を指すという・・



結局、ここにくるための静的リンクは変えられないし、
内部的にもfuga_hoges_pathといたるところで使っているので、
仕方がないので、相対パスはやめて、
/images/yukkuri.png
と全て絶対パスに置換しました。。・x・;


ま。最初から絶対パスにしておけば何事もなかったんですがね・・