我正在尝试在邮件中添加一些逻辑。基本上,我的一个模型中有十二个布尔字段,对于每个正确的字段,我希望将电子邮件发送到特定地址。具有布尔字段的模型称为Ecn。这是我的通知程序文件:
class EcnNotifier < ActionMailer::Base
default from: "[email protected]"
def submitted(ecn)
@ecn = ecn
@email_list = EmailList.all
if @ecn.distribute_engineering?
mail to: "[email protected]", subject: 'ECN approvald'
else
end
if @ecn.distribute_purchasing?
mail to: "[email protected]", subject: 'ECN approval'
else
end
mail to: "[email protected]", subject: 'ECN approval'
end
end
我在控制器中创建的动作如下所示:
def submit
@ecn = Ecn.find(params[:id])
respond_to do |format|
EcnNotifier.submitted(@ecn).deliver
format.html { redirect_to ecns_url, alert: "Ecn has been submitted for approval." }
format.json { render json: @ecns }
end
end
电子邮件会自动发送到[email protected],但是,无论distribute_engineering和distribute_purchasing是否为真,都不会将电子邮件发送到其他地址。我假设我错误地访问了我的对象实例,但是我不确定我要去哪里。
我认为您只能在一个邮递员操作中发送一封邮件,而不能发送多封邮件。您可以发送一封邮件并添加一些抄送或密件抄送,但只能在一项操作范围内发送一封邮件。
我将控制器更改为以下内容:
def submit
@ecn = Ecn.find(params[:id])
respond_to do |format|
EcnNotifier.notify_default(@ecn).deliver
EcnNotifier.distribute_engineering(@ecn).delifer if @ecn.distribute_engineering?
EcnNotifier.distribute_purchasing(@ecn).deliver if @ecn.distribute_purchasing?
# and so on...
format.html { redirect_to ecns_url, alert: "Ecn has been submitted for approval." }
format.json { render json: @ecns }
end
end
和您的EcnNotifier邮件:
class EcnNotifier < ActionMailer::Base
default from: "[email protected]"
def notify_default(ecn)
@ecn = ecn
@email_list = EmailList.all
mail to: "[email protected]", subject: 'ECN approval'
end
def distribute_engineering(ecn)
@ecn = ecn
@email_list = EmailList.all
mail to: "[email protected]", subject: 'ECN approval'
end
def distribute_purchasing(ecn)
@ecn = ecn
@email_list = EmailList.all
mail to: "[email protected]", subject: 'ECN approval'
end
end
顺便说一句:如果您要发送多封邮件,则应通过延迟作业gem或类似方式进行。否则,用户将不得不等待很长时间,因为在发送所有邮件期间,红宝石处理将被阻止。延迟的工作gem在github上可用:https : //github.com/collectiveidea/delayed_job
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句