Почему объект ноль в этом представлении? - PullRequest
0 голосов
/ 07 января 2020

Я хочу создать новый объект статьи, но у меня есть эта ошибка:

Отображение /Users/levanngoc/code/blog_app/app/views/articles/new.html.erb, где поднята строка # 3:

undefined method `errors' for nil:NilClass

error screenshot

Как это исправить?

это мой контроллер:

class ArticlesController < ApplicationController
  def index
    @article = Article.all
  end
  def show
    @article = Article.find(params[:id])
  end
  def new
  end

  def edit
  end
  def create
    @article = Article.new(article_params)
    if @article.save
      redirect_to @article
    else
      render 'new'
    end
  end

  def update
  end
  def destroy
  end

  private
    def article_params
      params.require(:article).permit(:title, :text)
    end
end

это мой файл просмотра: новый. html .erb

<h1>New Article</h1>
<%= form_with scope: :article,url: articles_path , local: true do |form| %>
  <% if @article.errors.any? %>
    <div id="error_explanation">
      <h2>
        <%= pluralize(@article.errors.count, "error") %>
        prohibited this article from being saved:
      </h2>
      <ul>
        <% @article.errors.full_messages.each do |msg| %>
          <li><%= msg %></li>
        <% end %>
      </ul>
    </div>
  <% end %>
  <p>
    <%= form.label :title %><br>
    <%= form.text_field :title %>
  </p>
  <p>
    <%= form.label :text %><br>
    <%= form.text_area :text %>
  </p>
  <p>
    <%= form.submit %>
  </p>
<% end %>
<%= link_to 'Back', articles_path %>

Ответы [ 2 ]

2 голосов
/ 07 января 2020

Ваше представление new использует @article, но действие new в контроллере не создает эту переменную экземпляра. Вы должны изменить его на:

def new
  @article = Article.new
end
1 голос
/ 07 января 2020

Вы должны заявить: @article = Article.new

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...