🐷

【Rails】管理者側にてコメント削除

2023/11/12に公開

ポートフォリオ作成にあたり、レビュー投稿に対して不適切なコメントを管理者側で削除するための機能をつけたので復習します。

完成形


※ ヘッダーが散らかっているのは気にしないでください笑

手順

コントローラ記述

admin/review_comments_controller.rb
class Admin::ReviewCommentsController < ApplicationController

  def index
    @review_comments = ReviewComment.all
    @users = User.all
  end

  def destroy
    @review_comment = ReviewComment.find(params[:id])
    @review_comment.destroy
    redirect_to admin_review_comments_path
  end

end

今回は、ユーザーのreview投稿へのコメントを一覧にしてそこで削除をするため、indexアクションとdestroyアクションに記述。誰のコメントかわかるようにするためユーザー情報を定義するため@users = User.allを記述。

ビュー記述

admin/review_comment/index.html.erb
<div class="container mt-5">
<h3>レビューコメント一覧</h3>
<table class="table mt-3">
  <tr>
    <th class="col-2">名前</th>
    <th class="col-8">コメント</th>
    <th class="col-1"></th>
    <th class="col-1"></th>
  </tr>
<% @review_comments.each do |review_comment| %>
  <tr>
    <td class="col-2"><%= @users.find(review_comment.user_id).name %></td>
    <td class="col-8"><%= review_comment.comment %></td>
    <td class="col-1"><%= review_comment.created_at.strftime('%Y/%m/%d') %></td>
    <td class="col-1">
    <%= link_to '削除', admin_review_comment_path(review_comment), method: :delete, data: { confirm: '本当に削除しますか?' },class: "btn btn-sm btn-danger" %>
    </td>
  </tr>
<% end %>
</table>

</div>

each文を作成し、レビューコメントの情報(投稿者、コメント、日時)が表示されるように設定します。

  • <%= @users.find(review_comment.user_id).name %>こちらの部分で先ほどindexアクションで定義したユーザー情報を取得します。
  • <%= link_to '削除', admin_review_comment_path(review_comment), method: :delete, data: { confirm: '本当に削除しますか?' },class: "btn btn-sm btn-danger" %>にて、@review_comments.eachのループ内で削除ボタンを表示するようにします。

感想

機能としてはもう少し難しいのかと思いましたが、もともとreview_comment.rb内でアソシエーションされていることもあり、admin側のコントローラにアクションを記述し、ビューで呼び出すだけなのでシンプルなつくりでした。
今回は、コミュニティサイトのようなホームページ作成ということもあり、メインはpublic側となるため優先順位としてadmin側のレイアウトは最小限で作成することにしました。時間ができた際にこだわろうと思います。

Discussion