Rails 3 + action mailer-No se puede hacer bucle para enviar correos electrónicos
Un usuario puede crear un objeto, y tiene seguidores que quiero alertar cuando crea este objeto.
Controlador:
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" <[email protected]>',
:subject => "#{project.owner.name} created a new project")
end
end
Prueba con un usuario que tiene 2 seguidores:User.find(1).followers.count = 2
Follower.follower
es el id
del usuario que está siguiendo.
Solo se envía 1 correo electrónico al 1er seguidor, y el 2do no recibe nada - ¿qué está mal?
[RESUELTO] = > el método .deliver
simplemente no admite varios mensajes. Thx DR
2 answers
ActionMailer no admite el envío de varios mensajes con una llamada deliver
.
Tienes que mover el bucle fuera del método new_project
:
En lugar de
UserMailer.new_project(@project).deliver
Prueba esto:
@followers = @project.owner.followers.all
@followers.each do |f|
UserMailer.new_project(@project, f).deliver
end
El método new_project
entonces podría verse así:
def new_project(project, follower)
@u = User.find(f.follower)
mail(:to => @u.email,
:from => '"Beatrix Kiddo" <[email protected]>',
:subject => "#{project.owner.name} created a new project")
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-07 09:18:05
También puede mover el .entregar llamada en su método new_project
. Esto funciona para mí usando Rails 3:
def new_project(project)
# ...
@followers.each do |f|
# ...
mail(:to => @u.email,
:from => '"Beatrix Kiddo" <[email protected]>',
:subject => "#{project.owner.name} created a new project").deliver
end
end
Para enviar los correos, usarías
if @project.save
# ...
UserMailer.new_project(@project)
else
# ...
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-05 08:13:33