概要
ActionMailerのメソッドで変数を受け取る方法は2つあります。一つはHogeMailer.with(arg:).fuga
の形式、もう一つはHogeMailer.fuga(arg)
の形式です。どんな違いがあるのか調べてみました。
前提
- Rails v7
両者の違い
HogeMailer.with(arg:).fuga
の形式では「Mailerインスタンス全体で」参照でき、HogeMailer.fuga(arg)
の形式では「呼び出したメソッド内でのみ」参照できるという違いがあります。
HogeMailer.with(arg:).fuga
の形式
この形式では以下のようにメソッドを定義し、変数を受け取ります。
class HogeMailer < ApplicationMailer def fuga @arg = params[:arg] # do somethings.. end end
メソッド内でparams[:変数名]
の形式でアクセスできます。また、fuga
関数を呼び出した後に同じHogeMailer
インスタンスで他のメソッドを呼び出してもparams[:変数名]
の形式でアクセスできます。
【例】
# mailers/hoge_mailer.rb class HogeMailer < ApplicationMailer def fuga @arg = params[:arg] end def piyo @arg = params[:arg] end end
# controllers/hello_controller.rb class HelloController < ApplicationController def index mailer = HogeMailer.with(arg: "arg") mailer.fuga.deliver_now mailer.piyo.deliver_now end end
HogeMailer.fuga(arg)
の形式
この形式では以下のようにメソッドを定義し、変数を受け取ります。
class HogeMailer < ApplicationMailer def fuga(arg) @arg = arg # do somethings.. end end
fuga
メソッド内でのみアクセスできます。公開範囲を絞りたいときはこちらを使うと良いでしょう。