Как удалить комментарии в приложении блога rails?

Я новичок в рельсах, я следовал руководству Blogger от Jumpstart Labs, чтобы создать приложение для ведения блога, и я пытаюсь реализовать функцию, которая позволит пользователям, вошедшим в систему, удалять комментарии к статьям. но меня все время сбивает с толку сообщение об ошибке «ActiveRecord :: RecordNotFound в CommentsController # destroy Не удалось найти статью с 'id' =»

вот что мне удалось до сих пор,

это мое приложение / контроллеры / comments_controller.rb

    class CommentsController < ApplicationController
    before_filter :require_login, except: [:create]

    def create
        @comment = Comment.new(comment_params)
        @comment.article_id = params[:article_id]

        @comment.save

        redirect_to article_path(@comment.article)
    end

    def destroy
      @article = Article.find(params[:article_id])
      @comment = @article.comments.find(params[:id])
      @comment.destroy

      redirect_to article_path(@article)
    end

    private

    def comment_params
        params.require(:comment).permit(:author_name, :body)
    end
end

и мой /views/articles/show.html.erb

    <h1><%= @article.title %></h1>

<p>
  <b>Posted on <%= @article.created_at.strftime("%B %d %Y") %></b>
</p>
<p>
    <% if @article.image.exists? %>
        <%= image_tag @article.image.url%>
    <% end %>
</p>
<p><%= @article.body %></p>
<%= render partial: 'comments/form' %>
<% if logged_in? %>
    <%= link_to "Edit", edit_article_path(@article) %>
    <%= link_to "delete", article_path(@article), method: :delete%>
<% end %>
<%= link_to "<< Back to Articles List", articles_path %>
<h3>Comments (<%[email protected] %>) </h3>
<%= render partial: 'articles/comment', 
collection: @article.comments %>
<p>
    Tags:
    <% @article.tags.each do |tag| %>
        <%= link_to tag.name, tag_path(tag) %>
    <% end %>
</p>

приложение / просмотры / статьи / comment.html.erb

   <div>
      <p><b>Comment by:</b> <%= comment.author_name %></p>
      <p class="comment"><%= comment.body %></p>
      <p>Posted <%= distance_of_time_in_words(comment.article.created_at,     comment.created_at) %> later</p>
      <%= link_to 'Delete Comment',  article_comment(article, comment),   method: :delete, data: { confirm: 'Are you sure?' } %>
   </div>

routes.rb

    Blogger::Application.routes.draw do
  get 'about', to: 'info#about'

  get 'portfolio', to: 'info#portfolio'

  get 'contact', to: 'info#contact'

    root to: 'articles#index'
    resources :articles do
        resources :comments
    end
    resources :tags
    resources :authors
    resources :author_sessions, only: [ :new, :create, :destroy ]
    get 'login' => 'author_sessions#new'
    get 'logout' => 'author_sessions#destroy'

end

и мой article_controller

class ArticlesController < ApplicationController
include ArticlesHelper
before_filter :require_login, only: [:new, :create, :edit, :update, :destroy]



def index
    @articles = Article.all
end
def new
    @article = Article.new
end

def create
     @article = Article.new(article_params)
     @article.save
     flash.notice = "Article '#{@article.title}' Created!"
     redirect_to article_path(@article)
end

def show
    @article = Article.find(params[:id])
    @comment = Comment.new
    @comment.article_id = @article.id
end

def edit
    @article = Article.find(params[:id])
end

def update
    @article = Article.find(params[:id])
    @article.update(article_params)
    flash.notice = "Article '#{@article.title}' Updated!"
    redirect_to article_path(@article)
end

def destroy

    @article = Article.find(params[:id])
    @article.destroy
    flash.notice = "Article '#{@article.title}' Deleted!"
    redirect_to articles_path
end

конец

Любой ввод или совет очень ценятся, я некоторое время искал Google и переполнение стека, но я еще не нашел решения


person Miles Rose    schedule 26.12.2015    source источник


Ответы (2)


Ошибка NameError in Articles#show undefined local variable or method article может быть исправлена ​​путем изменения этой строки в app / views / article / _comment.html.erb (я считаю, что это имеет _)

из

<%= link_to 'Delete Comment',  article_comment(article, comment),   method: :delete, data: { confirm: 'Are you sure?' } %>

to

<%= link_to 'Delete Comment',  article_comment_path(comment.article, comment),   method: :delete, data: { confirm: 'Are you sure?' } %>

И в views / article / show.html.erb попробуйте изменить collection: @article.comments на collection: @article.comments.all.

person Van Huy    schedule 27.12.2015
comment
Спасибо, исправление link_to в comment.html.erb помогло мне преодолеть ошибку NameError, хотя я все еще возвращаюсь к исходной точке, когда я нажимаю ссылку Удалить комментарий на странице показа моей статьи, я все еще получаю ActiveRecord :: RecordNotFound в CommentsController # destroy Не удалось найти статью с id = из моего исходного сообщения. Вы знаете, как мне избавиться от этой ошибки? - person Miles Rose; 27.12.2015
comment
Я по-прежнему получаю ту же ошибку ActiveRecord :: RecordNotFound в CommentsController # destroy Не удалось найти статью с 'id' =, но если это помогает, страница ошибки выделяет первую строку действия destroy в моем comments_controller.rb @article = Article.find (params [: article_id]) - person Miles Rose; 27.12.2015
comment
Не могли бы вы опубликовать журнал, нажав «Удалить комментарий»? Это похоже на Started DELETE "blogs/..." Parameters: { ...}. Я просто хочу увидеть ссылку и параметры - person Van Huy; 27.12.2015
comment
Хорошо, похоже, мой сервер rails даже по какой-то причине не обновлял изменения, которые я внес в views / article / show.html.erb, поэтому я закрыл сервер, а затем запустил его снова, и похоже, что это решило проблему, Я могу успешно удалять комментарии! ура! :) Все еще не уверен, почему сервер так не обновлялся, но я приму ваш ответ как решение моей проблемы, спасибо :) - person Miles Rose; 27.12.2015

Чтобы избежать этой конкретной ошибки, вам необходимо разрешить параметры: id и: article_id

Добавьте их вот так

params.require(:comment).permit(:author_name, :body, :id, :article_id)
person MilesStanfield    schedule 26.12.2015
comment
Он не использует массовое назначение в методе destroy, поэтому я думаю, что сильный параметр здесь не проблема - person Van Huy; 27.12.2015
comment
Посмотрим на ваш контроллер статей. - person MilesStanfield; 27.12.2015