🔖
rails コメント削除機能実装
みなさん、こんばんは!
大野は新年一発目の鞭打ちになり、体のコントロールが効かず、とても苦しいですが、めげずにがんばります!
シチュエーション
オリジナルアプリの投稿された記録に対してコメントができるように実装後。
コメントをした人がコメントを削除できるようにする。
ルーティング
resources :records do
resources :comments, only: [:create, :destroy]
end
記録に対してコメントになるので、ルーティングのネストになる
コントローラー
comments contller
def destroy
@record = Record.find(params[:record_id])
comment = @record.comments.find(params[:id])
if current_user.id == comment.user.id
comment.destroy
redirect_back(fallback_location: root_path)
else
render "records/show"
end
end
記録投稿のIDを取得
コメントのIDを取得
条件式で、ログインした状態かつ、投稿者が削除できるように記述
削除後は、記録の詳細ページへ、
ビューファイル
record.html.erb
#省略
<ul class="comments">
<h3><コメント一覧></h3>
<% if @comments %>
<% @comments.each do |comment| %>
<li class="comments">
<%= link_to comment.user.nickname, user_path(comment.user_id), class: :comment_user %>
<%= comment.text %><br>
<%= link_to 'コメントを削除する', record_comment_path(@record, comment), confirm: 'Are you sure?', method: :delete %>
</li>
</ul>
<% end %>
<% end %>
ルーティングのネストになっているときは引数が2ついるらしい(record_comment_path(@record, comment)の部分)
今日の学び
調べながらやればできたが、なぜ引数が2ついるのかとか全然わかってない。
コメント機能もAction Cableっていうのを使えば、リロードしなくてもいいけど、投稿したデータを削除する方法もイマイチわからないまま実装するのも嫌だったので、次の機会にチャレンジしよう!
Discussion