Ruby on rails Rails操作mailer if语句

Ruby on rails Rails操作mailer if语句,ruby-on-rails,ruby-on-rails-3,actionmailer,Ruby On Rails,Ruby On Rails 3,Actionmailer,我想在我的邮件中加入一些逻辑。基本上,我的一个模型中有十几个布尔字段,对于每个为真的字段,我希望向特定地址发送一封电子邮件。带有布尔字段的模型称为Ecn。这是我的通知程序文件: class EcnNotifier < ActionMailer::Base default from: "engineering_notices@wilfley.com" def submitted(ecn) @ecn = ecn @email_list = EmailList.all

我想在我的邮件中加入一些逻辑。基本上,我的一个模型中有十几个布尔字段,对于每个为真的字段,我希望向特定地址发送一封电子邮件。带有布尔字段的模型称为Ecn。这是我的通知程序文件:

class EcnNotifier < ActionMailer::Base
  default from: "engineering_notices@wilfley.com"

  def submitted(ecn)
    @ecn = ecn
    @email_list = EmailList.all
    if @ecn.distribute_engineering?  
        mail to: "abc@gmail.com", subject: 'ECN approvald' 
    else

    end
    if @ecn.distribute_purchasing? 
        mail to: "123@gmail.com", subject: 'ECN approval' 
    else

    end
    mail to: "aaa@test.com", subject: 'ECN approval'
  end
end

电子邮件会自动发送到aaa@test.com,但无论distribute_engineering和distribute_purchasing是否正确,电子邮件都不会发送到其他地址。我假设我没有正确访问对象实例,但我不确定哪里出了问题。

一次调用
deliver
只能发送一封邮件。您必须将逻辑移到邮件发送程序之外,或者使用cc或bcc将邮件发送给多个收件人。

我认为您只能在一个邮件发送程序操作中发送一封邮件,而不能发送多封邮件。您可以发送一封邮件并添加一些抄送或密件抄送,但只能在一个操作范围内发送一封邮件

我会将控制器更改为以下内容:

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
还有你的电子邮箱:

class EcnNotifier < ActionMailer::Base
  default from: "engineering_notices@wilfley.com"

  def notify_default(ecn)
    @ecn = ecn
    @email_list = EmailList.all
    mail to: "aaa@test.com", subject: 'ECN approval'
  end

  def distribute_engineering(ecn)
    @ecn = ecn
    @email_list = EmailList.all
    mail to: "abc@gmail.com", subject: 'ECN approval' 
  end

  def distribute_purchasing(ecn)
    @ecn = ecn
    @email_list = EmailList.all
    mail to: "abc@gmail.com", subject: 'ECN approval' 
  end

end
classecnnotifier
顺便说一句:如果你要发送多封邮件,你应该通过延迟工作宝石或类似的方式来发送。否则,用户必须等待相当长的时间,因为ruby进程将在发送所有邮件时被阻止。延迟作业gem可在github上获得:

class EcnNotifier < ActionMailer::Base
  default from: "engineering_notices@wilfley.com"

  def notify_default(ecn)
    @ecn = ecn
    @email_list = EmailList.all
    mail to: "aaa@test.com", subject: 'ECN approval'
  end

  def distribute_engineering(ecn)
    @ecn = ecn
    @email_list = EmailList.all
    mail to: "abc@gmail.com", subject: 'ECN approval' 
  end

  def distribute_purchasing(ecn)
    @ecn = ecn
    @email_list = EmailList.all
    mail to: "abc@gmail.com", subject: 'ECN approval' 
  end

end