我有一个名为 的模型quiz
,它有很多questions
模型。我想添加某种逃避处理,以便当用户在quiz_id
URL 中输入错误时,将呈现错误页面。
我写了一些辅助方法QuestionsController
来处理异常:
private
def render_error(message)
@error_message = message
render 'error'
end
def active_quizzes_safe
active_quizzes = Quiz.active_quizzes(current_user.id)
render_error('Sorry! The request is invalid! Please log in again!') if active_quizzes.nil?
active_quizzes
end
def active_quiz_safe(quiz_id)
active_quiz = active_quizzes_safe.where(id: quiz_id).first
render_error('The quiz does not exist or you are not allowed to take this quiz!') if active_quiz.blank?
active_quiz
end
这是QuestionsController
有问题的操作:
def show_quiz
if current_user
@quiz = active_quiz_safe(params[:quiz_id])
@questions = @quiz.questions
end
end
因此,如果:quiz_id
URLlocalhost:3000/MY_URL/:quiz_id
中的 不正确(即找不到记录),则该方法应呈现错误页面render_error
。然而,当我累错了:quiz_id
,我得到了undefined method 'questions' for nil:NilClass
。我想这是因为@questions = @quiz.questions
inshow_quiz
方法。
但是,执行是否应该在动作之后停止render_error
,也就是之前@questions = @quiz.questions
?为什么@questions = @quiz.questions
还是被执行?
另外,有没有标准的方法来处理这样的 nil:NilClass 错误?
谢谢!!