我想弄清楚我在使用ActionMailer做错了什么。我需要能够将多个参数传递给邮件程序,但继续收到错误“错误的参数数量(1对2)”。
我的代码是: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
基本上我需要将同一封电子邮件发送给几个不同的收件人,这些收件人的电子邮件地址都在与士兵模型相关的模型中。当方法中只有一个参数时,我发送电子邮件没有问题。如果我添加多个,则抛出该错误。
我将不胜感激任何帮助或指导。
感谢。
答案 0 :(得分:2)
after_create方法只能将模型作为参数。 如果主要是士兵的领域,你应该做类似
的事情def after_create(soldier)
SoldierMailer.deliver_welcome_email(soldier, soldier.primary)
end
答案 1 :(得分:0)
也许我并不完全理解你的困境,但是发送与deliver_welcome_email
方法不同的东西有什么不对吗?
也许您可以使用多个收件人向该方法发送数组或哈希值。从阅读rails文档看来,这些动作邮件程序方法似乎只有一个参数。
另外,我有点困惑为什么你需要将这两个参数发送到邮件程序。看起来您只使用了soldier
。
答案 2 :(得分:0)
试试这个:
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中的'收件人'可以获取一系列电子邮件地址。希望这会有所帮助。