掲示板の編集、削除機能の実装
今回は、掲示板に編集と削除機能を実装してみた。 特に滞りなく実装できたのだが、その際にいくつかまた新たに学んだことがあるのでまとめてみました。
・掲示板取得の際のコード
edit, update,destroyアクションでは、掲示板を取得する段階でバリデーションにかけるべし
# GOOD @board = current_user.boards.find(params[:id]) # BAD @board = Board.find(params[:id])
また、この際にbefore_actionで定義しておくことでよりDRYなコードになる。
before_action :set_board, only: [:edit, :update, :destroy] . . . private def set_board @board = current_user.boards.find(params[:id]) end
・編集、削除ボタンについて
編集ボタン、削除ボタンなどの汎用性の高いものは、パーシャル化しておくと良い。 また、その際はインスタンス変数ではなく、ローカル変数を使うとよい。 (コントローラーとの依存性があるインスタンス変数だと、汎用性が低下するため)
# 下のように、パーシャル内はローカル変数にしておき、引数としてインスタンス変数を渡してやる <%= render 'form', { board: @board } %>
・フォームのパーシャル化
フォームをパーシャル化した際、ボタンの表示だけ動的にするにはどうすれば良いのか? A, content_forやprovideメソッドを使用してyieldで渡してやる
# new.html.erb内 <% content_for(:btn_txt, '登録する') %> # edit.html.erb内 <% content_for(:btn_txt, ‘更新する’) %>
# _form.html.erb内 <%= f.submit yield(:btn_txt), class: 'btn btn-primary' %>