NAiZのプログラミング道日記

個人web開発勉強で学んだことや経験を備忘録形式で呟きます。

Ruby on Rails チュートリアル 7日目(2章, 3章)

Ruby on Rails チュートリアル2章!

久しぶりの投稿になります。

先週はいろいろあって、チュートリアルをなかなか進めることが出来ませんでした(言い訳ですが(笑))。目標は4章だったのですが、結局3章までのコンプになります。

まず2章のエラーについてです。

データモデルについて実験をしていた時です。rails consoleを順次実行したのですが、なぜか以下のエラーが...

irb(main):001:0> first_user=User.first
  User Load (0.3ms)  SELECT  "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ?  [["LIMIT", 1]]
=> #<User id: 2, name: "Okarin", email: "Okabe@example.com", created_at: "2020-03-09 12:05:57", updated_at: "2020-03-09 12:05:57">
irb(main):002:0> first_user.microposts
  Micropost Load (0.4ms)  SELECT  "microposts".* FROM "microposts" WHERE "microposts"."user_id" = ? LIMIT ?  [["user_id", 2], ["LIMIT", 11]]
=> #<ActiveRecord::Associations::CollectionProxy []>
irb(main):003:0> micropost = first_user.microposts.first
  Micropost Load (0.2ms)  SELECT  "microposts".* FROM "microposts" WHERE "microposts"."user_id" = ? ORDER BY "microposts"."id" ASC LIMIT ?  [["user_id", 2], ["LIMIT", 1]]
=> nil
irb(main):004:0> micropost.user
Traceback (most recent call last):
        1: from (irb):4
NoMethodError (undefined method `user' for nil:NilClass)
irb(main):005:0> exit

うーん、わからないけどデータベースのアクセスに不具合がありそう。
よくよく見ると1人目のユーザーIDが?になっている。そういえばユーザーを追加したり削除するときに、1人目のUserを削除した気がする、、、

ということでデータベースを初期化!
もういちど登録することで解決しました。良かった。
最初のUserを削除してしまったせいでしたね。もしかしたらデータベースを初期化せずとも更新すれば良かったのかもしれません。

Ruby on Rails チュートリアル3章!

bitbranchでプッシュする際に、間違いのoriginを作成してしまいました!(git remote add originの際に名付けをミス)間違えたローカル上のorogin(リモート追跡ブランチ)を削除することができず、いろいろと試したのですが、結局アプリを作り直しました。(笑)
いやもう、リポジトリ作成とpushは次からは慎重にやります...(戒め)

テスト駆動開発(TDD)

しかしテストを先に作ってからプログラムを構築していくという手法は、C言語Javaを扱っていた私からすると、とても新鮮でしたね。まだこの手法の真の恩恵を受けるに至ってはいないと思いますが、確かに。テストコードを書く手間とバグを取り除く手間を天秤にかけたらテストコードを先に記述する方が効率が良い、というのはとても理に適っていると思います。現に、チュートリアルでは何度もRedを連発しましたが、テストコードを追えば簡単にエラーの場所を発見することが出来ました。リグレッションテストができるという点も大きなメリットですね。C言語は回帰バグでエンドレスにシステムが動いたりしますから…。

まとめ

今回は3章まででしたが、今週中には5章を終わらせたいと思います。同時にブロックチェーンについて書かれたマスタリング・イーサリアムの勉強も並行して頑張っていきたいと思います。Ruby自体も勉強しないと…(笑)