掲示板の編集と削除機能の実装(view)
<実現したいこと>
編集と削除ボタンは掲示板を作成した本人にのみ表示させる
①編集・削除ボタンの部分テンプレートを作成
<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 %>
<%= icon 'fa', 'pen' %>
<% end %>
</li>
<li class="list-inline-item">
<%= link_to board_path(board), id: "button-delete-#{board.id}", method: :delete, data: {confirm: t('defaults.message.delete_confirm')} do %>
<%= icon 'fas', 'trash' %>
<% end %>
</li>
</ul>
idは今後、jsを使ってボタンを操作するときのために割り振っている。
app/views/boards/show.html.erb
<%= render 'crud_menus', board: @board if current_user.own?(@board) %>
でviewファイルから部分テンプレート(パーシャル)を呼び出して、編集、削除ボタンを表示する。
呼び出したいパーシャルと呼び出すファイルが同じディレクトリ内にあるため、ディレクトリ名を指定 = 'boards/crud_menus'としなくても呼び出すことができる。また、board : @boardはレンダー先でboardを@boardとして扱うためである。基本的にパーシャルでインスタンス変数は用いず、ローカル変数を用いる。if current_user own?(@board)で掲示板を作成した本人かの判定をしている。
current_user.own?(@board)
の部分は、app/models/user.rb内に記載した
def own?(object)
id == object.user_id
end
を呼び出している。