目次 閉じる
プロフィールを表示する
前回までで、プロフィールの作成・保存・編集ができるようになった
今回は、プロフィールを表示していく
プロフィールの内容を定義する
app/models/user.rbを開く
【現在】メールアドレスの@より前をdisplay_nameと定義して、current_user.display_nameが表示するようになっている
def display_name
self.email.split('@').first
end
# = current_user.display_namedisplay_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
endbirthdayもgenderも、profileに存在したら表示する、と定義するnilなら何も表示しない
↓ 定義したけど、毎回これをかくのは面倒くさい
def birthday
profile&.birthday
end
def gender
profile&.gender
enddelegateでまとめて書くことができる
delegate :birthday, :gender, to: :profile, allow_nil: trueprofileの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
