Hatena::ブログ(Diary)

いとうまさしのカチャカチャTODAY

2010-04-15

ActionViewとActionControllerでurl_forの挙動が違います

| 21:58

URLを出力するためにつかう「url_for」というメソッドがあります。

root_path, root_url, XXXX_path, XXXX_urlなどroutes.rbで定義したURLを呼び出すメソッドでも内部的に使っています。

このurl_forやXXXX_urlですが、Controllerの中で呼ぶときとViewの中で呼ぶときで挙動が違います。

Viewで呼ぶ時はURLがエスケープされたものが返ってくるのです。

Controllerでは

http://localhost:3000/controller/action?a=1&b=2

となるところがViewだと

http://localhost:3000/controller/action?a=1&b=2

となります。

普通にブラウザを相手にする場合は問題ないですが、

ActionMailerで送信するメールの文面の場合は不具合の素になるので注意が必要です。

url_forの引数に「:escape => false」を渡すとエスケープされずに返ってきます。

トラックバック - http://d.hatena.ne.jp/itmsc/20100415/1271336323