※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。
自身の記事かどうかで表示を分岐する
前回:アプリのフォームから記事の作成・編集・更新・削除をできるようにして、記事情報をユーザーと紐づけた
今回は、自身の投稿記事にのみ「編集」「削除」のボタンを表示させる
app/views/articles/show.html.hamlに条件を追加する
- if user_signed_in? && current_user.articles.exists?(id: @article.id)
user_signed_in?
signed_inしているuserに表示する&&
かつcurrent_user.articles.exists?(id: @article.id)
current_userの持っているarticlesに、id:が @article.idと同じ記事がありますか?exists?
合っているけど、パッと見たときにコードの意図が分かりにくい・・・
app/models/user.rbにメソッドを追加する
def has_written?(article)
articles.exists?(id: article.id)
end
has_written?(article)
→ (引数:article)を書きましたか?(writtenはwriteの過去形)
↑やっていることは先程と同じ
app/views/articles/show.html.hamlを書き換える
- if user_signed_in? && current_user.has_written?(@article)
exists?
と書くより、has_written?
と書くほうが、やりたいことが分かりやすい
- 複雑なコードは書かない
- できるだけ簡単に、シンプルに、誰が見ても分かりやすいように書くこと
- 複雑な条件分岐はmodelでメソッドを定義しておく
ユーザー名を表示する
登録しているメールアドレスを分割し、「@」より前の部分をユーザー名にする
def display_name
self.email.split('@').first
end
self.email
自身のメールアドレスが取得できるsplit('@')
取得したメールアドレスを「@」の位置で分割する
例)sample1234@gmail.com→「sample1234」「gmail.com」first
(もしくは [0])
配列の最初(インデックス番号0)の値「sample1234」を取得するdisplay_name
「sample1234」がユーザー名となる
これで、登録されているメールアドレスをもとにユーザー名が設定できる
記事一覧ページ、記事詳細ページにメソッドを追加する
app/views/articles/show.html.haml、_article.html.hamlに書き換える
%p= @article.user.display_name
_article.html.hamlを編集すると、index.html.hamlに反映する
#DAY21