【rails】プロフィールを表示する

※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。

プロフィールを表示する

前回までで、プロフィールの作成・保存・編集ができるようになった

今回は、プロフィールを表示していく


プロフィールの内容を定義する

ニックネームを定義する

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
  1. プロフィールにニックネームがあれば表示する
  2. なければ、メールアドレスの@より前を表示する

プロフィールがないとエラーになる

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

&.」をぼっち演算子といい、これを使うとコードを省略できる

  1. profilenilじゃなかった場合だけ、nicknameを実行する
  2. nilの場合はself.email.split('@').firstが実行される

誕生日・性別を定義する

app/models/user.rbを開く

  def birthday
    profile&.birthday
  end

  def gender
    profile&.gender
  end
  1. birthdaygenderも、profileに存在したら表示する、と定義する
  2. nilなら何も表示しない

便利なメソッド「delegate」

↓ 定義したけど、毎回これをかくのは面倒くさい

 def birthday
    profile&.birthday
  end

  def gender
    profile&.gender
  end

delegateでまとめて書くことができる

  delegate :birthday, :gender, to: :profile, allow_nil: true
  1. profilebirthdaygenderを渡してくれる
  2. allow_nilはぼっち演算子をしてくれる
  3. ぼっち演算子「profile&.」がnilでもエラーが起きない(true

viewで表示させる

html.hamlに書き足していく

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))

rubyを展開させる指示をだす

1行で書きたいときは「=」を消して「#{}」で囲う

#{current_user.display_name}(#{current_user.birthday}・#{current_user.gender})

「rubyの文字を展開して表示してね」、とhamlに指示を出す


自己紹介文を表示させる

profiles/show.html.hamlにはこんな感じで直接書いちゃう

= current_user.profile&.introduction

#DAY24