设置邮件程序时的未定义方法

时间:2014-06-29 02:43:14

标签: ruby-on-rails ruby-on-rails-4

我正在尝试在我的应用程序中设置邮件程序(第一次),以便在回答用户问题时通过电子邮件通知他们。

我的问题是我无法让控制器正常工作。

我的路线看起来像这样:

 resources :questions do
   resources :answers
 end

在我的answers_controller中我有这个:

def create
  @answer = Answer.new(answer_params)
  @question = Question.find(params[:question_id])

if @answer.save
  UserMailer.question_answer(@user).deliver
 end 
end

在user_mailer.rb文件中我有:

 def question_answer(user) 
   @answer = Answer.new
   @question = @answer.question
   mail(:to => @question.user.email, :subject => "Your question was answered!")  
 end 

然而,在发布答案时,我收到此错误:

undefined method `user' for nil:NilClass

1 个答案:

答案 0 :(得分:2)

您需要在参数中传递@answer,

UserMailer.question_answer(@answer, @user).deliver

你会从@answer得到问题。在mailer.rb中

def question_answer(answer, user) 
  @answer = answer
  @question = @answer.question
  @user = user
  mail(:to => @question.user.email, :subject => "Your question was answered!")  
end

现在,您将通过电子邮件传递每个参数。在你的问题中,我发现你只是传递了用户并且让那个用户有问题,但你会有一个空白的@question,所以该问题的用户将是空白的。这就是为什么你得到零级错误。

希望得到这个帮助。