Rails 3 +动作邮件程序 – 无法循环发送电子邮件

用户可以创建一个对象,并且他在创建此对象时有我想要提醒的关注者。

控制器:

if @project.save format.html { redirect_to(@project, :notice => 'Project was successfully created.') } format.xml { render :xml => @project, :status => :created, :location => @project } # Send a notification to project owner's followers : UserMailer.new_project(@project).deliver else ... 

user_mailer.rb:

 def new_project(project) @url = "http://localhost:3000/" @project = project # For each of project owner's follower, send an email notification @followers = project.owner.followers.all @followers.each do |f| @u = User.find(f.follower) mail( :to => @u.email, :from => '"Beatrix Kiddo" ', :subject => "#{project.owner.name} created a new project") end end 

与拥有2个关注者的用户进行测试:
User.find(1).followers.count = 2

Follower.followerFollower.follower的用户的id

只有1封电子邮件发送给第一个粉丝,第二封邮件没有收到任何东西 – 出了什么问题?

[ .deliver ] => .deliver方法根本不支持多条消息。 Thx DR

ActionMailer不支持通过一次deliver呼叫发送多条消息。 您必须将循环移到new_project方法之外:

代替

 UserMailer.new_project(@project).deliver 

试试这个:

 @followers = @project.owner.followers.all @followers.each do |f| UserMailer.new_project(@project, f).deliver end 

然后new_project方法可能如下所示:

 def new_project(project, follower) @u = User.find(f.follower) mail(:to => @u.email, :from => '"Beatrix Kiddo" ', :subject => "#{project.owner.name} created a new project") end 

您还可以将.deliver调用移动到new_project方法中。 这适用于我使用Rails 3:

 def new_project(project) # ... @followers.each do |f| # ... mail(:to => @u.email, :from => '"Beatrix Kiddo" ', :subject => "#{project.owner.name} created a new project").deliver end end 

要发送邮件,您可以使用

 if @project.save # ... UserMailer.new_project(@project) else # ... end