備忘録です!
#boardコントローラーの追加
boards_controller.rb
def edit
@board = current_user.boards.find(params[:id])
def update
@board = current_user.boards.find(params[:id])
if @board.update(board_params)
redirect_to board_path(params[:id]), success: t('defaults.message.edited', item: Board.model_name.human)
else
flash.now['danger'] = t('defaults.message.not_edited', item: Board.model_name.human)
render :edit
end
end
def delete
@board = current_user.boards.find(params[:id])
@board.destroy!
redirect_to boards_path, success: t('defaults.message.deleted', item: Board.model_name.human)
今回は、他人の作成した掲示板の編集ページにアクセスした場合は404エラー(ActiveRecord::RecordNotFound)となるように実装したい.
@board = Board.find(params[:id])
とすると、全てのboardのから情報を取得できてしまう。
なので、
@board = current_user.boards.find(params[:id])
current_userを用いることで、現在ログインしているユーザーが所有しているboardのみからしか情報を取得できないため、自分の投稿でない場合、ページに転移することも、編集することも、削除することもできない。
##HTMLのdata属性
データを削除するときに、「本当に削除してよろしいですか?」質問され、「はい」というボタンを押したら削除できるように実装していきます。
<%= link_to 'リンク', ○○_path, data: { confirm: 'ダイアログで表示させるメッセージ' } %>
こちらでダイアログを出せるので、今回は、
<%= link_to board_path(board.id), id: "button-delete-#{board.id}", method: :delete, data: {confirm: '本当に削除してもよろしいです'} do %>
<%= icon 'fas', 'trash' %>
<% end %>
とします。