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言語は回帰バグでエンドレスにシステムが動いたりしますから…。