ActionMailer でテンプレートを指定する ― 2009/08/11
ActionMailer のRDocでは何故か解説が無いようですが
Model側で
class FooMailer < ActionMailer::Base def bar from 'foobar@example.com' recipients 'foobar@example.com' template 'hoge' body :mes1 => 'hogehoge', :mes2 => 'foobar' end end FooMailer.create_bar # foo_mailer/bar.erb ではなく foo_mailer/hoge.erbが使用される
と、templateメソッドを利用すると、当該のメールがcreate!される際のテンプレートが明示的に指定できます。 引数は、APP_ROOT/app/views/foo_mailer からの相対パスです。 拡張子は、例のルールで補完されます。
テンプレートをファイルではなく String で与えたい場合に適切なメソッドは無いのですが、 ActionMailer::Base#create! は実行された際、@body が 既にStringのインスタンスならレンダリング処理はスキップして @body の内容をそのままメール本文とするようです。
class FooMailer < ActionMailer::Base def piyo from 'foobar@example.com' recipients 'foobar@example.com' body 'piyo piyo' end end FooMailer.create_piyo.body #=> 'piyo piyo'
あとは、自前でerbのコンパイルをするか、 ActionController::Base#render に、:inlineを与えたときのようなメソッドを実装すればいけるはず。 (ActionMailer::Base#render はファイル名しか取れない)
とりあえず、今日はここまで
コメント
トラックバック
このエントリのトラックバックURL: http://dragonstar.asablo.jp/blog/2009/08/11/4504868/tb
※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。