2014-10-05 74 views
0

我想通過我的ActionMailer發送電子郵件到commentable業主的電子郵件另一個用戶寫他們的評論之後,但我不斷收到一個錯誤。有人可以幫我解決這個問題嗎?提前致謝。的Rails的ActionMailer發送電子郵件的commentable模型

comment_mailer.rb

def email_notification(member, comment) 
    @member = commentable.member 
    @sender = comment.member 
    mail to: commentable.member.email, subject: "#{comment.member.full_name} (#{comment.member.user_name}) has left you a comment" 
end 

comment.rb

belongs_to :member 
belongs_to :commentable, polymorphic: true 
attr_accessible :content 

after_create :send_email 

def send_email 
    CommentMailer.email_notification(member, comment).deliver 
end 

錯誤

undefined local variable or method `comment' for #<Comment:0x51c2ad8> 

app/models/comment.rb:18:in `send_email' 
app/controllers/comments_controller.rb:20:in `block in create' 
app/controllers/comments_controller.rb:19:in `create' 

comments_controller

before_filter :authenticate_member! 
before_filter :load_commentable 
before_filter :find_member 

def index 
    redirect_to root_path 
end 

def new 
    @comment = @commentable.comments.new 
end 

def create 
    @comment = @commentable.comments.new(params[:comment]) 
    @comments = @commentable.comments.order('created_at desc').page(params[:page]).per_page(15) 
    @comment.member = current_member 
    respond_to do |format| 
     if @comment.save 
     format.html { redirect_to :back } 
     format.json 
     format.js 
     else 
     format.html { redirect_to :back } 
     format.json 
     format.js 
     end 
    end 
end 

def destroy 
    @comment = Comment.find(params[:id]) 
    respond_to do |format| 
     if @comment.member == current_member || @commentable.member == current_member 
     @comment.destroy 
     format.html { redirect_to :back } 
     format.json 
     format.js 
     else 
     format.html { redirect_to :back, alert: 'You can\'t delete this comment.' } 
     format.json 
     format.js 
     end 
    end 
end 

private 

def load_commentable 
    klass = [Status, Medium, Project, Event, Listing].detect { |c| params["#{c.name.underscore}_id"] } 
    @commentable = klass.find(params["#{klass.name.underscore}_id"]) 
end 

def find_member 
    @member = Member.find_by_user_name(params[:user_name]) 
end 

回答

1

你的錯誤是在send_email方法。沒有局部變量,稱爲comment。您已經在評論的實例中,您想要發送電子郵件的實例。所以你想用關鍵字self來代替。

更改此:

def send_email 
    CommentMailer.email_notification(member, comment).deliver 
end 

要這樣:

def send_email 
    CommentMailer.email_notification(member, self).deliver 
end 

self指評論當前情況下,要使用你的郵件。

+0

謝謝。這就是我做錯了。 – iamdhunt 2014-10-06 01:04:24

相關問題