掲示板の編集と削除機能の実装(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

を呼び出している。