🔖

rails コメント削除機能実装

2021/01/11に公開

みなさん、こんばんは!

大野は新年一発目の鞭打ちになり、体のコントロールが効かず、とても苦しいですが、めげずにがんばります!

シチュエーション

オリジナルアプリの投稿された記録に対してコメントができるように実装後。
コメントをした人がコメントを削除できるようにする。

ルーティング

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