Railsで画像のパスを取得したいときは、image_pathを使います。
<%= image_tag 'test.png' %> <%= image_path 'test.png' %>
これらのヘルパーメソッド、Viewの中で使う分には問題なく動くのですが、Controller内で使うと、prefixが付かない問題が発生します。
たとえば、http://example.com/myapp/ をアプリのルートにしているとき、
View内で使用: /myapp/images/test.png
Controller内で使用:/images/test.png
このように戻り値が違います。
完全にバグとしか言えないのですが、とりあえず修正しないことには仕方ないので、
prefix = ActionController::Base.relative_url_root path = image_path 'test.png' return prefix + path
みたいな処理を行うことにしました。ControllerとView両方で呼び出すメソッドでは、判定式も必要になりそうです。
Railsはprefix周りで問題が多いですね。
サーバに明示的な引数まで指定してこれですか・・・と
何も指定しなくても勝手にやってくれるCakePHPは、実はすごく優秀な子だったんだと見直すばかりです。