ログイン中ユーザーの投稿に編集用アイコンを表示する
ログインしているユーザーが自分の投稿を編集できるように、編集用のえんぴつマークのアイコンをFontAwesomeを使って表示させます。
自分以外のユーザーの投稿やコメントには編集アイコンを表示させないようにします。
ログインしているユーザーが投稿を作成したユーザーかどうか判定する
sorceryのcurrent_userメソッドを使って、ログイン中ユーザーと投稿を作成したユーザーが一致するかどうかを判定します。
掲示板 _post.html.erb
<% if current_user.id == post.user_id %> <a href="#"> <i class="fa fa-pen"></i> </a> <% end %>
コメント _comment.html.erb
<% if current_user.id == comment.user_id %> <a href="#"> <i class="fa fa-pen"></i> </a> <% end %>
これは一見良さそうに見えますが、よく見ると掲示板とコメントで同じようなコードを書いています。
postとcommentで違うモデルを扱っているから仕方ないじゃん!と思いますが、ユーザーのidを取って来ている点で同じなので、まとめられるんです。
Userモデルで共通化する
Userモデルでまとめてしまいましょう!
user.rb
def own?(object) object.user_id == self.id #selfは省略可 end
objectで共通化しています。これでpostでもcommentでも、引数を指定して使えるようになります。
ちなみにインスタンスメソッドの中でselfを使うと、そのメソッドを利用したレシーバを参照することができます。
以下のビューでcurrent_user.own?のように使うので、この場合のselfの中身はuserが入るようになりますことになります。
(current_userはsorceryによって作られたログイン中ユーザーを特定するメソッドです)
投稿 _post.html.erb
<% if current_user.own?(post) %> <a href="#"> <i class="fa fa-pen"></i> </a> <% end %>
コメント _comment.html.erb
<% if current_user.own?(comment) %> <a href="#"> <i class="fa fa-pen"></i> </a> <% end %>
モデルで定義したown?メソッドを使って、ログイン中ユーザーのidとpostやcommentのuser_idを比較しています。