Ruby on rails を学習中の方の参考にしてもらえたら嬉しいです。
アプリケーションを作成している時に出てくるエラーとその解決方法について掲載します。少しでも参考にしていただけると幸いです。
今回はエラーの解決方法ではなく、アプリ開発での新発見について備忘録として書き残しておく。
今回の事象を解説
今回は記事投稿アプリで記事作成した際に ユーザーの名前が表示されない と言う事象を解決していきます。今回はrailsでエラーが出ていたわけではなく、表示崩れが起きているという現象です。
私の当初の想定ではプロフィールを変更しなければ会員登録した際のメールアドレスの@の前の文字列がユーザーネームとして表示される想定でした。
しかし、一度プロフィール編集画面を開き、保存ボタンを押してしまうとユーザーネームを編集していなくても空の文字列として編集されてしまいました。
こうなると下の画像のようにユーザーネームが空のまま保存され、記事投稿者の名前が何も表示されなくなります。
これでは使い勝手が悪いので、ユーザーネームが空の場合はメールアドレスの@の前の文字列をユーザーネームとして表示させることにします。
▼本来は以下の画像のようにユーザー名に登録したメールアドレスの『@』の前の文字列が表示されるはず。
▼しかし、編集ページでユーザーネームの欄を空のまま保存すると以下のように名前がなくなってしまう。
この事象を解決していきます。
結論から話します
画像のように 『.presence』をつけると解決します。対象コードは以下に貼っておきます。
def display_name
profile&.nickname.presence || self.email.split('@') .first
end
このコードはdisplay_name
と言うメソットを定義しています。内容はprofileのnicknameがあればそれを表示させるが、なければ登録したメールアドレスの@マークの前の文字列を表示します。と言う内容になっています。
そこに.presence
を足しておくと解決します。
内容を解説します。
.presence
をつければ良いということは分かったが、なぜ?ということが知りたい方はここから詳細を解説していきます。
例によってChatGPTを使って問題を特定していきます。
まずはこのメソッドの解説を求めます▼
解説の詳細は画像のとおりです。
そして、プロフィールページのnameを空で編集を保存しても空のままが表示されないように『.presence』をつけるように提案がされました▼
最後に
ということで、記事投稿者の名前を表示したいときは
def display_name
profile&.nickname.presence || self.email.split('@') .first
end
と、メソッドを定義してあげれば良くて、編集ページのネーム欄を空で保存した場合にユーザーネームが表示されなくなってしまうという現象には.presence
をつけてあげれば解決しました。
いかがでしたでしょうか?
他にも記事を発信していきますので、私の QiitaやTwitterをフォローしていただけると嬉しいです。
個別の質問もぜひ歓迎します。
私自身、初学者ではありますが、1歩先を行くものとして回答できたらと思います。
それでは。