この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
メール本文中のURLはエスケープされて、「&」は「& amp;」になってしまう注意点
■ URLを作成
メール中でURLを作成するため、url_forを使用します。
■ URLにパラメータを追加
url_for(:action => ‘some_action’, :custom1 => ‘some_value’, :custom2 => ‘some_value’, :escape => false)
:escape => falseを指定しないと、urlがエスケープされます。
「&」は「& amp;」になってしまいます。
●注意点:
Rails3から、<%= … %>で出力される値が暗黙的にエスケープ処理されるように変更になりました。
ですので、メールテンプレートの中で、下記のように書いても、メールを表示するとき、エスケープされて、「&」は「& amp;」になってしまいます。
<%= url_for(:action => ‘/some_action’/, :custom1 => ‘/some_value’/, :custom2 => ‘/some_value’/, :escape => false) %>
●対策:
html_safeを使用
<%= url_for(:action => ‘/some_action’/, :custom1 => ‘/some_value’/, :custom2 => ‘/some_value’/, :escape => false).html_safe %>
or
rawを使用
<%= raw(url_for(:action => ‘/some_action’/, :custom1 => ‘/some_value’/, :custom2 => ‘/some_value’/, :escape => false)) %>
■ :formatを指定する場合
url_for :controller=>’posts’, :action=>’index’, :format=>:xml
結果:
“http://www.example.com/posts.xml“
url_forの詳しい使用について、下記を参照のこと
ドキュメント: