⭐️掲示板の編集、削除機能の実装
・Userモデルに記載していた
def own?(object) id == object.user_id end
を利用して、自分が作成した掲示板のみ、編集、削除ボタンを表示させるように実装。
・app/views/boards/_board.html.erb
※重要
boards_controller.rb # Bad @board = Board.find(params[:id]) ※ この記載では、URL入力時のIDを変えると自分以外が作成した掲示板を対象にできてしまう。 このアプリは他の人の掲示板を見られる仕様のため、showアクションではBoardから取得させても問題ない。 しかし、editやupdate, destroyアクションでは、他人の作成した掲示板を変更できないように実装。 # Good @board = current_user.boards.find(params[:id]) ※ current_user.boardsによって、対象のユーザーに関連する掲示板の集合が取得できる。
def destroy @board.destroy!
!
を使っている理由は、削除処理は「必ず成功するもの」だから。
save
save!
は、処理が失敗したときの挙動が違います。 前者はfalse を返し、後者は例外を返します。
例えば、掲示板作成でタイトルを入力漏れし、falseが帰ってきたら、エラー表示箇所を訂正してまた作成を試みます。掲示板作成は「失敗する可能性がある」処理です。
一方、削除の処理は失敗する余地がない処理です。この処理が失敗したときは、意図的に処理を止めてデバッグが必要になります。
🟢総括
今回の課題で、
・モデルにメソッドを定義することで条件変更時にモデルメソッド1箇所の変更で済む保守性が良くな流ことが分かった。
・破壊的メソッド!
の使い方をよく理解できた!🔥