掲示板の編集、削除機能の実装

boards_controllerに追加(edit update destroy set_board)

class BoardsController < ApplicationController
beforeaction :set_board, only: [:edit, :update, :destroy]
def new
@board = Board.new
end

def create
@board = current_user.boards.build(board_params)
if @board.save
flash[:success] = '掲示板を作成しました'
redirect_to boards_path
else
flash.now[:danger] = '掲示板の作成にしました'
render :new
end
end

def show
@board = Board.find(params[:id])
@comment = Comment.new
@comments = @board.comments.includes(:user).order(created_at: :desc)
end

def index
@boards = Board.all.includes(:user).order(created_at: :desc)
end

def edit; end

def update
if @board,update(board_params)
flash[:success] = "掲示板を更新しました"
redirect_to @board
else
flash[:danger] = "掲示板の更新に失敗しました"
render :edit
else
end

def destroy
@board.destroy!
redirect_to boards_path
flash[:success] = "掲示板を削除しました"
end

private

def set_board
@board = current_user.boards.find(params[:id])
end

def board_params
params.require(:board).permit(:title, :body)
end
end

edit,update,destroyアクションはURLから他の人の掲示板を編集できないようにするためset_boardで対象のユーザーの掲示板のみ取得できるようにする

 

class User < ApplicationRecord
def own?(object)
object.user_id == id
end
end

current_userと掲示板を作ったuserが一緒かどうか確認

 

<ul class='crud-menu-btn list-inline float-right'>
<li class="list-inline-item">
<%= link_to edit_board_path(board), id: "button-edit-#{board.id}" do %>
<p>編集</p>
<% end %>
</li>
<li class="list-inline-item">
<%= link_to board_path(board), id: "button-delete-#{board.id}",
method: :delete, data: { confirm: "削除しますか?" } do %>
<p>削除</p>
<% end %>
</li>
</ul>

編集ボタン、削除ボタンの作成

 

<%= render 'shared/crud_menus', board: @board if current_user.own?(@board)%>

編集ボタン、削除ボタンが必要な場所に記述