1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Rails] コメントの削除方法

Posted at

はじめに

この記事は、コメント機能が実装できているのが前提で進めています。それでは実装していきましょう。

実装内容の一覧

  1. ルーティングの設定
  2. コントローラーの設定
  3. ビューの設定

1. ルーティングの設定

削除機能を実装するので、以下のように、routes.rb に destroy アクションを加えましょう。

routes.rb
<!--省略-->
  resources :gurumes do
    resources :likes, only: [:create, :destroy]
#追記箇所
    resources :comments, only: [:create, :destroy]
#ここまで
  end
<!--省略-->

2. コントローラーの設定

comments_controller.rb にも、以下のように destroy アクションを加えましょう。

comments_controller.rb
<!--省略-->
#追記箇所
  def destroy
    comment = Comment.find(params[:gurume_id])
    comment.destroy
    redirect_back(fallback_location: root_path)
  end
#ここまで
<!--省略-->

簡単に解説すると、該当するコメント見つけて comment に代入し、comment を削除したら元のパスに戻るということです。

3. ビューの設定

最後にビューの設定です。show.html.erb に以下のコードを追記して下さい。

show.html.erb
<!--省略-->
<% @comments.each do |c| %>
    <div>
        <%= c.user.email unless c.user.blank? %>
        <br>
        <%= c.content %>
    </div>
#追記箇所
    <% if user_signed_in? && current_user.id == c.user_id %>
        <%= button_to "削除する", gurume_comment_path(c.id), method: :delete %>
    <% end %>
#ここまで
<% end %>
<!--省略-->

追記箇所について簡単に解説します。

<%= button_to "削除する", gurume_comment_path(c.id), method: :delete %>

については、削除ボタンを実装しています。rails routes によって遷移先のパスを確認してみて下さい。また、今回は delete メソッドであるので、link_to ではなく、button_toにしました。

<% if user_signed_in? && current_user.id == c.user_id %>
<!--省略-->
<% end %>

については、コメントした本人だけがコメントを削除できるように設定しています。自分のコメントを他人に削除されたら困りますよね。そのことを防止するためにこのコードを書いています。
以上で実装は終わりです。

さいごに

最後まで読んでいただきありがとうございました。
コメントの削除機能を実装したい方は、是非この記事を参考にしてもらえると嬉しいです。
また、間違いやその他意見など、ありましたらコメントいただけると幸いです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?