複数の引数を渡すactionmailerの
-
21-09-2019 - |
質問
私はactionmailerのと間違っをやっているかを把握しようとしています。私は、メーラーに複数の引数を渡すことができるようにする必要がありますが、エラー「引数の数が間違って(2 1)」を受信し続けます。
私のコードは次のとおりです。soldier_controller
def create
@soldier = Soldier.new(params[:soldier])
@battalion = Battalion.find(params[:battalion_id])
@company = Company.find(params[:company_id])
@frg = @company.users.find_by_position('FRG Leader')
respond_to do |format|
if @soldier.save
flash[:notice] = 'Soldier was successfully created.'
format.html { redirect_to battalion_company_soldier_path(@battalion, @company, @soldier)}
format.xml { render :xml => @soldier, :status => :created, :location => @soldier }
else
format.html { render :action => "new" }
format.xml { render :xml => @soldier.errors, :status => :unprocessable_entity }
end
end
end
soldier_mailer.rbます:
class SoldierMailer < ActionMailer::Base
def welcome_email(soldier, primary)
recipients soldier.primary.email
from "laurenrothlisberger@gmail.com"
subject "Welcome to the Unit"
sent_on Time.now
body
end
soldier_observer.rbます:
def after_create(soldier, primary)
SoldierMailer.deliver_welcome_email(soldier, primary)
end
基本的に私は、そのメールアドレスがすべての兵士モデルに関連付けられているモデルであるいくつかの異なる受信者に、この同じ電子メールを送信する必要があります。私はこの方法ではただ一つのパラメータがある場合に電子メールを送信して問題はありません。私は複数を追加する場合には、そのエラーをスローします。
私は任意のヘルプや指導をいただければ幸いです。
感謝します。
解決
これを試してみてください
class SoldierMailer < ActionMailer::Base
def welcome_email(soldier)
recipients soldier.email_addresses
from "laurenrothlisberger@gmail.com"
subject "Welcome to the Unit"
sent_on Time.now
end
end
あなたの兵士のモデルではこれにより、:私はあなたが使用したい複数の電子メールアドレスが含まれている関連があると仮定しています。
。class Soldier
has_many :users
def email_address
# Results in ['primary@abc.com', 'user1@abc.com', 'user2@abc'.com]
([primary] + users.collect { |u| u.email }).flatten
end
end
キーはactionmailerの中に「受信者」は、メールアドレスの配列を取ることができるということです。この情報がお役に立てば幸いです。
他のヒント
after_createメソッドは、パラメータとしてモデルを取ることができます。 プライマリが兵士のフィールドがある場合、あなたのような何かを行う必要があります。
def after_create(soldier)
SoldierMailer.deliver_welcome_email(soldier, soldier.primary)
end
?たぶん私は完全にあなたの苦境を理解していないが、そこに何が間違っているだけで、あなたのdeliver_welcome_email
方法に何か別のを送信している。
たぶん、あなたはあなたの複数の受信者に法に配列やハッシュを送信することができます。レールのマニュアルを読んでから、これらのアクションメーラー方法は一つだけの引数を取るようです。
また、私は少しあなたのメーラーにこれらのパラメータの両方を送信する必要がある理由について困惑しています。それはあなたにのみ使用soldier
のように見えます。