※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。
プロフィールを表示する
前回までで、プロフィールの作成・保存・編集ができるようになった
今回は、プロフィールを表示していく
プロフィールの内容を定義する
app/models/user.rbを開く
【現在】メールアドレスの@より前をdisplay_name
と定義して、current_user.display_name
が表示するようになっている
def display_name
self.email.split('@').first
end
# = current_user.display_name
display_name
の定義を以下に変更する
def display_name
profile.nickname || self.email.split('@').first
end
- プロフィールにニックネームがあれば表示する
- なければ、メールアドレスの@より前を表示する
\nickname
のメソッドが見つからないよ〜〜/
そもそもプロフィールがない場合もある
プロフィールがある前提のコードはよくないので、書き換える
def display_name
if profile && profile.nickname
profile.nickname
else
self.email.split('@').first
end
end
- プロフィールがある、かつ、ニックネームもある
→ ニックネームを表示する - どちらもない
→ メールアドレスの@より前を表示する
def display_name
profile&.nickname || self.email.split('@').first
end
「&.
」をぼっち演算子といい、これを使うとコードを省略できる
profile
がnil
じゃなかった場合だけ、nickname
を実行するnil
の場合はself.email.split('@').first
が実行される
app/models/user.rbを開く
def birthday
profile&.birthday
end
def gender
profile&.gender
end
birthday
もgender
も、profile
に存在したら表示する、と定義するnil
なら何も表示しない
↓ 定義したけど、毎回これをかくのは面倒くさい
def birthday
profile&.birthday
end
def gender
profile&.gender
end
delegate
でまとめて書くことができる
delegate :birthday, :gender, to: :profile, allow_nil: true
profile
のbirthday
、gender
を渡してくれるallow_nil
はぼっち演算子をしてくれる- ぼっち演算子「
profile&.
」がnil
でもエラーが起きない(true
)
viewで表示させる
profiles/show.html.hamlで、プロフィールの内容を表示させる
= current_user.display_name current_user.birthday current_user.gender
上記のように書いてしまうと、rubyは引数として認識してしまう可能性がある↓
= current_user.display_name(current_user.birthday(current_user.gender))
1行で書きたいときは「=
」を消して「#{}
」で囲う
#{current_user.display_name}(#{current_user.birthday}・#{current_user.gender})
「rubyの文字を展開して表示してね」、とhamlに指示を出す
profiles/show.html.hamlにはこんな感じで直接書いちゃう
= current_user.profile&.introduction
#DAY24