投稿者にのみ編集と削除リンクを表示させる。(判定ロジック)

def own?(object)
  object.user_id == id
end

user.rbにこのコードを記載することで、掲示板のコメントページに遷移した時、自分が投稿した掲示板なら編集と削除リンクを表示させ、自分が投稿した掲示板ではないなら表示させない機能を作ります。

目次


コードの解説

<% if @board.user_id == @current_user.id %>
  <% link_to('編集', board_path) %>
  <% link_to('削除', board_path, method: :delete) %>
<% end %>

この書き方でもOKですが、判定ロジックは様々なところで使用され、メンテナンス時に一つ一つ変更を加なければいけないのでかなり面倒です。


user.rb

def own?(object)
  object.user_id == id
end

ここでuser.rbに上記を加えます。 ロジックをControllerやViewではなく、Modelに記載することで、メンテナンス時にModelのみの変更ですみます。

<% if current_user.own?(board) %>
  <% link_to('編集', board_path) %>
  <% link_to('削除', board_path, method: :delete) %>
<% end %>


コードの中身を確認

object.user_id == id

こちらのidには、selfが省略されています。このselfは、current_userのオブジェクトを指すので、current_user.idとなります。 objectにboardが代入され、board.user_id == current_user_id(掲示板のuser_idとサインインしているユーザーのuser_idが同じ)なら、このメソッドはtrueを返します。