🐷
【Rails】管理者側にてコメント削除
ポートフォリオ作成にあたり、レビュー投稿に対して不適切なコメントを管理者側で削除するための機能をつけたので復習します。
完成形
※ ヘッダーが散らかっているのは気にしないでください笑
手順
コントローラ記述
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