【rails】掲示板の編集・削除機能のポイント

はじめに

掲示板の編集・削除機能について

掲示板の編集・削除機能のポイント

edit,update,destroyアクションでは、boardを取得するときには下記のようにcurrent_userを使う。

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

current_userと関連を使うことで、自分以外の投稿を編集、更新、削除できなくします。

他の方が不正にアクセスしようとすると、current_userがnilになるのでエラーになります。

逆にshowアクションでは、他人の掲示板も閲覧できるようにしたいので次のように定義します。

@board = Board.find(params[:id])

自分の掲示板には編集・削除ボタンを表示する

Userモデルに下記のようなメソッドを作り、ビュー側で呼び出します。

  def own?(object)
    object.user_id == id  # selfが省略されている
  end
<%= render 'crud_menus', board: board if current_user.own?(board) %>

インスタンスメソッド内でselfレシーバを使うと、実行対象のインスタンス変数を参照できるため、引数が1つで済みます。

今回の場合だとselfはcurrent_userのオブジェクトになります。

これでログインしているユーザー(current_user)のIDと、boardのuser_idが一致した場合にのみ、

編集・削除ボタンが表示されます。

編集・削除ボタンのビューはパーシャルで分けています。

削除ボタンに確認ダイアログを設定する

削除処理を実行するときに、確認ダイアログを設定するには、

カスタムデータ属性(date-confirm属性)というものを使います。

data: { confirm: 'ダイアログで表示させるメッセージ' }

例)
<%= link_to board_path(board), method: :delete, data: { confirm: '削除してもよろしいですか?' } do %>

上記のように設定することで、

削除ボタンを押した後に削除してもよろしいですか?という確認ダイアログが表示されます。