2017-03-09 123 views
0

我有点卡住,需要一些帮助!发送电子邮件给所有注册用户

我创建了一个UserMailer并试图传递一个方法,在该方法中我可以向所有注册用户发送一封电子邮件。我将它发送给所有注册用户,但不能附加主题和内容。主题和内容都使用表单在通讯模型中创建。如果我试图在UserMailer mail to: emails, subject: newsletter.subject, content: newsletter.content上传递它,它将返回一个错误。

如果我将它作为波纹管,它会返回... NoMethodError in Newsletters#deliver ... undefined method 'subject'for nil:NilClass ...。在视图页面中。

任何想法,我可能会失踪?先谢谢你!!

模型协会是:

user.rb的has_many:通讯

newsletter.rb belongs_to的:用户

class UserMailer < ApplicationMailer 
    default from: ‘[email protected]' 

def newsletter(users_email) 
    @users = User.all 
    emails = @users.collect(&:email).join(", ") 
    mail(to: emails, subject: 'My Newsletter') 
    end 


class NewslettersController < InheritedResources::Base 

    def deliver 
    @newsletter = Newsletter.find params[:id] 
    UserMailer.newsletter(@newsletter).deliver 
    flash[:notice] = "Newsletter currently being delivered." 
    redirect_to newsletters_url 
    end 

Rails.application.routes.draw do 
resources :newsletters do 
    member do 
     post :deliver 
    end 
end 

视图页面上的链接是<%= link_to "Deliver", deliver_newsletter_path(newsletter), :confirm => 'Are you sure?', :method => :post %>

而且在查看页面:

<!DOCTYPE html> 
<html> 
    <head> 
    <meta content='text/html; charset=UTF-8' http-equiv='Content-Type' /> 
    </head> 
    <body> 
    <h1>Helo <%= @users.name %></h1> 
    <p> 
     Subject <%= @newsletter.subject %> <br> 
    </p> 

     <p> 
     Subject <%= @newsletter.content %> <br> 
    </p> 
    <p> 
    .<br> 
    </p> 

    </body> 
    </html> 

回答

3

在邮件程序中,您需要将@newsletter传递给邮件视图,就像从控制器到常规视图一样。

def newsletter(newsletter) 
    @newsletter = newsletter 
    @users = User.all 
    # ... 
end 
+0

哇,真是那么简单!!!谢谢@iceman !!!唯一的是用户名不会出现在电子邮件中,我在查看页面上使用了这个名称'<%= @ users.name%>'...任何想法? – Theopap

+0

'@ users'是一个'Users'数组,所以这个变量没有名字。由于您要向所有用户发送相同的电子邮件,而不是骑自行车通过用户列表并发送单个电子邮件,因此您不能在该电子邮件中输入名称。 – Iceman

-1

我认为问题出现在您的通讯方式中。参数是users_email未被使用。

相关问题