2024.08.14(更新日: 2024.08.14)
テーブルにデータを追加する

はじめに
現状、以下のようなエラーが発生している。

エラーの分析
以下のエラーは、空のクラスに対して、eachというメソッドは定義されていないという意味。
undefined method `each' for nil:NilClass
'.freeze; @posts.each do |post|
^^^^^^
nilとは、存在しないという意味。

@postsの定義箇所
コントローラーで以下のように定義している。postsテーブルからすべてのレコードを取得したものが、インスタンス変数の@postに入っている。

rails cで対話型モードを起動
rails cで、対話型モードを起動させることができる。

起動させた様子。

@postの中身が存在しないことを確認してみる
@post.nil?の結果は、true。

postsテーブルの構造を確認してみる
まずは、rails dbでデータベースの対話モードを起動。

.tablesで、テーブルの一覧を確認できる。その中に、postsテーブルがあった。

.schems テーブル名で、テーブル名を指定して、テーブルの構造を間接的に確認することができた。間接的にというのは、これで確認できるのが、命令文だからだ。日本語にすると、もしpostsテーブル(カラム名やデータ型、null制約などの指定)が存在しなかったら、作成しなさいとなる。

sqlite> .schema posts
CREATE TABLE IF NOT EXISTS "posts" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "content" text, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL);
現状は、テーブルはあるが、中身が空という状況だろう。
postsテーブルに値を入れる
ここで本題に入ろう。
railsコンソールでレコードを追加していく。
まずは、データベースの対話モードを、.exitで終了する。

そして、rails cで対話モードを起動する。

createメソッドで、レコードの追加を行う。

無事に、レコードを挿入することができた。

挿入されたレコードはこちら。
id: 1, content: "最初の投稿", created_at: Wed, 14 Aug 2024 04:56:27.255770000 UTC +00:00, updated_at: Wed, 14 Aug 2024 04:56:27.255770000 UTC +00:00
エラーが解消しなかった
レコードを挿入したはずなのに、以下のエラー画面のままである。

エラーの真の原因
コントローラで定義した、@postと、

ビューで使用している、@postsの名前が違うことが原因だった。

コントローラの@postを@postsに変更すると、エラーが解消された。

投稿ID : 23977
コメントを残す