Rails 3 + action mailer - Cannot loop to send emails

后端 未结 2 1246
长发绾君心
长发绾君心 2020-12-29 04:55

A user can create an object, and he has followers that I want to alert when he creates this object.

controller:

if @project.save
  f         


        
相关标签:
2条回答
  • 2020-12-29 05:16

    You can also move the .deliver call into your new_project method. This works for me using Rails 3:

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

    To send the mails, you would use

    if @project.save
       # ...
       UserMailer.new_project(@project)
    else
       # ...
    end
    
    0 讨论(0)
  • 2020-12-29 05:26

    ActionMailer does not support sending multiple messages with one deliver call. You have to move the loop outside of the new_project method:

    Instead of

    UserMailer.new_project(@project).deliver
    

    try this:

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

    The new_project method then could look like this:

    def new_project(project, follower)
        @u = User.find(f.follower)
        mail(:to => @u.email,
             :from => '"Beatrix Kiddo" <beatrix@example.com>',
             :subject => "#{project.owner.name} created a new project")
    end
    
    0 讨论(0)
提交回复
热议问题