目次 閉じる
プロフィールを表示する
前回までで、プロフィールの作成・保存・編集ができるようになった
今回は、プロフィールを表示していく
プロフィールの内容を定義する
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
  end- birthdayも- genderも、- profileに存在したら表示する、と定義する
- nilなら何も表示しない
↓ 定義したけど、毎回これをかくのは面倒くさい
 def birthday
    profile&.birthday
  end
  def gender
    profile&.gender
  enddelegateでまとめて書くことができる
  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

