どんな Issue をしたのか
- Issue: Docsに表示する情報を増やしてほしい · Issue #1517 · fjordllc/bootcamp
- PR: Docsに表示する情報を増やす by kotakanazawa · Pull Request #1603 · fjordllc/bootcamp
実現したいこと
- 誰でも作成できるドキュメントページ(Docs)に、作成者のアイコンを表示する
- Docsの一覧ページ(index)には、作成者のアイコンと最終更新日を表示したい
- 詳細ページ(show)にも作成者のアイコンを表示したい
Webフレームワークは Rails を採用している。
苦戦した点
NilClassエラーの解決に手こずった
ドキュメントを保存する pages テーブルと、users テーブルを紐付ける必要があった(アソシエーション)。というのも、pages テーブルにはuser_id
を保存するカラムがなかった。そのためユーザーのアイコンを取得することができなかった。
アソシエーションを設定したはいいものの、コントローラーやビューを修正してアイコンを表示しようとしたら、NoMethodError がでてしまった。アイコンを表示するためのメソッドであるavatar_url
が、undefined になっていた。
undefined method `avatar_url` for nil:NilClass
エラーが出ていた箇所
= image_tag page.user.avatar_url ~
page
という Page モデルインスタンスのuser_id
がnil
になっていたために出たエラーだった。
結果的に、このエラー解決にもっとも時間をかけてしまった…。
苦戦した理由
- エラーの対処法(デバッグ)がわかっていなかった
nil:NilClass
エラーが出る意味をよくわかっていなかった
これに尽きる。
どうやって問題を解決したのか?
nil
について復習した- デバッグの基礎を学習した
デバッグの基本を学ぶには、以下の記事がとても参考になった。
プログラミング初心者歓迎!「エラーが出ました。どうすればいいですか?」から卒業するための基本と極意(解説動画付き) - Qiita
printデバッグにさようなら!Ruby初心者のためのByebugチュートリアル - Qiita
感謝です🙏
学び
デバッグの大切さ
今までは、エラー画面の赤い文字を見て「うげ・・・」となっていた。
しかし、今回デバッグの基礎を学んだことにより、「お、なんかエラー出たな。原因はなんだろ?」と素直に思えるようになった。恐怖心がすこし減った。
DBに変更がある場合は別 Issue に切り出して先にやる場合がある
今回、pages テーブルにuser_id
が入っていないとエラーで画面が表示されないのが明らかだった。こんな場合は、先にマイグレーションとデータ挿入をするため、別Issueに切り分けておこなう。
本番のデータ変更をどうやって行うか
単発の rake タスクに書く。