#ruby-on-rails #ruby-on-rails-4
#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.
@user
должно быть равно нулю, когда оно передается из действия create . Убедитесь@user
, что он находится в области видимости.2. Хм, я немного запутался. Ошибка подчеркивает третью строку в user_mailer.rb, но должен ли я все же добавить что-то вроде «@user = @question.user» в действие создания?
3. да, он не выдаст ошибку, пока не попытается использовать nil. У него не будет никаких проблем с передачей nil. Итак, это означает, что вам нужно вернуться назад и выяснить, почему это nil. Попробуйте эту точную строку сразу после
if @answer.save
4. Нет, не повезло с добавлением этой строки.
5. Похоже, проблема в mail(:to => @question.user.email). @вопрос может быть нулевым.
Ответ №1:
Вам нужно передать @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, поэтому пользователь этого вопроса будет пустым. вот почему вы получали ошибку нулевого класса.
Надеюсь, это поможет.
Комментарии:
1. @user2759575: Отлично, с удовольствием 🙂