通过Active Mailer中的数组循环问题

时间:2015-11-25 17:19:54

标签: ruby-on-rails arrays ruby email ruby-on-rails-4.2

我正在尝试实现一项允许用户向多个收件人发送一封电子邮件的功能。我通过调用recipient email方法拆分.split参数,将其转换为数组。然后我使用每个方法遍历数组,该方法应该将mail方法应用于数组中的每个元素。控制器和邮件程序代码如下。

控制器代码

 def create
    @scoreboard = Scoreboard.find(params[:scoreboard_id])
    @invitation = @scoreboard.sent_invitations.build(invitation_params)
    if @invitation.save
            UserMailer.registered_invitation_email(@scoreboard, @invitation).deliver_now
            flash[:success] = "Invitation sent successfully"
            redirect_to new_scoreboard_invitation_path
        else
            render 'new'
    end
    end
end

邮件代码

def registered_invitation_email(scoreboard, invitation)
     @scoreboard = scoreboard
     @invitation = invitation
     split_email = @invitation.recipient_email.split
     split_email.each do |email|
       mail(to: email, subject: "View scoreboard")
    end

  end

问题是它只将电子邮件发送到数组中的最后一个元素。例如,如果用户在表单中键入"joe@example.com Mike@example.com",则它只会向数组中的最后一个元素发送电子邮件。在这种情况下,Mike@exapmle.com。我不知道为什么会这样。我想我正在循环它。我不确定是什么导致了这个问题。我不确定它的循环或循环是否在活动邮件程序中不起作用。不完全确定。任何帮助,将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

尝试这样的事情

使用字段

创建模型
field :mail_to
field :subject

在同一模型中创建一个方法

def deliver
   UserMailer.send_invitation_mail(self).deliver
end

邮件程序

def send_invitation_mail(email)
   mail(to: email.mail_to, subject: email.subject)
   email.destroy
end

控制器

def create
  user_emails.each do |email|
      email = Email.new(:mail_to => "xxx@yyy.com",:subject => "View Scoreboard") # Email is the model name. 
      email.deliver
      sleep(1)
  end 
end

这样你也可以在模型中记录并传送所有邮件,并对电子邮件进行各种操作。