2017-03-09 125 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未被使用。

相關問題