在此Rails指南的section中,它被指示在@article = Article.new
的{{1}}方法中添加new
,说明否则我们将无法访问ArticlesController
。
据我了解,@article.errors
创建了@articles = Article.new
的新实例,我们需要的是我们尝试提交的Article
变量。我知道它有效,但是我需要了解原因。
控制器代码:
@article
查看代码:
class ArticlesController < ApplicationController
def index
@articles = Article.all
end
def show
@article = Article.find(params[:id])
end
def new
@article = Article.new
end
def create
@article = Article.new(article_params)
if @article.save
redirect_to @article
else
render 'new'
end
end
private
def article_params
params.require(:article).permit(:title, :text)
end
end
答案 0 :(得分:0)
它说:
我们在其中添加@article = Article.new的原因 ArticlesController是,否则@article在我们的代码中为nil 视图,并调用@ article.errors.any?会引发错误。
因此与访问验证错误无关。
在@article
操作中没有new
变量的情况下,您将在视图中调用errors
值的nil
方法,而nil
没有这样的方法,因此会出现错误undefined method 'errors' for nil:NilClass
。如果@article
变量设置为Article.new
,则可以在errors
类实例上调用Article
方法,并且由于尚未存在验证错误,因此#error_explanation
块将不会呈现。
但是,当您尝试创建新记录时,将进行验证。并且,如果存在验证错误,您的Rails应用程序会再次渲染new
模板,但是它会使用create
操作来渲染它。因此,这次的@article
变量是create
方法中的变量,并且由于其中存在验证错误,因此#error_explanation
块将被呈现,用户将看到问题所在。>