2017-03-09 18 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

これは簡単でした!!!ありがとうございました!唯一のことは、ユーザー名が電子メールに表示されないということです。ビューページでこれを使用しています。<%= @ users.name%> '...任意のアイデア??? – Theopap

+0

'@ users'は' Users'の配列なので、その変数には名前はありません。あなたはユーザーリストを通ってサイクリングするのではなく、同じ電子メールをすべてのユーザーに送信しているので、個々の電子メールを送信するので、そこに名前を付けることはできません。 – Iceman

-1

あなたのニュースレターの方法に問題があると思います。引数がusers_emailで、使用されていません。

関連する問題