ActiveRecord::RecordNotFound в ArticlesController#показать — Не удалось найти статью с ‘id’ = 13

#ruby-on-rails #ruby

#ruby-на-рельсах #рубиновый

Вопрос:

Итак, я делаю Jumpstarts Blogger tutorial:

http://tutorials.jumpstartlab.com/projects/blogger.html#i1:-form-based-workflow

Я пытаюсь удалить статьи, добавив метод уничтожения в свой контроллер, однако, похоже, возникает проблема с базой данных при фактическом удалении статей. Статьи удаляются при запуске на моем локальном сервере, но, похоже, не из базы данных?

Вот мой article_controller.rb

 class ArticlesController < ApplicationController
    include ArticlesHelper

    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)
        @article.save
        redirect_to article_path(@article)

    end

    def destroy
        @article = Article.find(params[:id])
        @article.destroy
        redirect_to article_path
    end
end
 

Мое шоу.html.erb

 <h1><%= @article.title %></h1>
<p><%= @article.body %></p>
<%= link_to "<< Back to Articles List", articles_path %>
<%= link_to "delete", article_path(@article) , 
        method: :delete , 
     data: {confirm: "Really delete the article?"}%>
 

Статьи.помощник.erb

 module ArticlesHelper

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

end
 

Я также запустил консоль и выполнил поиск Article.find(1) , и он находит только индекс до 3.

Я возился с созданием и удалением статей (именно поэтому до индекса 13), и при попытке удалить и статью я получаю эту ошибку:

 ActiveRecord::RecordNotFound in ArticlesController#show

Couldn't find Article with 'id'=13
 

Мы будем очень признательны за любые советы или предложения.

Ответ №1:

В вашем destroy действии измените перенаправление на articles_path (множественное число) вместо единственной версии. Единственная версия попытается найти статью, которую вы только что удалили, которая, конечно, больше не существует.

 def destroy
    @article = Article.find(params[:id])
    @article.destroy
    redirect_to articles_path # pluralized the path
end
 

Комментарии:

1. Вы заслуживаете всего в жизни и даже больше. Это сработало, спасибо.