在“新”视图上显示验证错误

时间:2019-08-16 01:49:44

标签: ruby-on-rails

在此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

1 个答案:

答案 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块将被呈现,用户将看到问题所在。