前回からの続きです。前回はControllerクラスを作成して、HTMLの画面に値を出力させるところまでご紹介したと思いますが、今回はHTMLの画面に表示させるためのデータをDBに登録していきたいと思います。
seed.rbを使用してテストデータを作成
データを登録するには、SQLでINSERT文を使用してデータを登録していくと思うのですが、今回はプロジェクト内にあるseed.rbというファイルを使用してテストデータを作成していきたいと思います。seed.rbファイルを使用すればDBに初期データをあらかじめ登録することができます。
テーブルの詳細を確認
データを作成するにあたりテーブルの詳細を確認しましょう。
まずは、下記コマンドでsqliteを起動します。
1 |
rails dbconsole |
次に下記コマンドでテーブルの中のカラムを確認しましょう。
1 |
.schema |
私の場合下記のように表示されます。
1 2 3 4 5 6 |
sqlite> .schema CREATE TABLE IF NOT EXISTS "schema_migrations" ("version" varchar NOT NULL PRIMARY KEY); CREATE TABLE IF NOT EXISTS "ar_internal_metadata" ("key" varchar NOT NULL PRIMARY KEY, "value" varchar, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL); CREATE TABLE IF NOT EXISTS "tasks" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "detail" text, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL); CREATE TABLE sqlite_sequence(name,seq); |
今回はtasksテーブルにデータを登録するのでtasksテーブルのカラムを確認します。
ついでに既存のデータがあるかも確認しておきます。確認するには下記SELECT文を実行します。
1 |
select * from tasks; |
既に前回作成したデータが1件ありました。
1 2 |
sqlite> select * from tasks; 1|test||2020-02-25 14:55:12|2020-02-25 14:55:12 |
seed.rbファイルにプログラムを記載
テーブルを構成するカラムが確認できたら下記のようにseed.rbファイルにプログラムを記載します。
1 2 3 4 5 6 7 8 9 10 |
tasks = [ { id: 2, name: 'test2', detail: 'test2 detail'}, { id: 3, name: 'test3', detail: 'test3 detail'}, { id: 4, name: 'test4', detail: 'test4 detail'} ] ActiveRecord::Base.transaction do tasks.each do |task| Task.create!(task) end end |
簡単に説明すると、処理としてはtasksという変数に登録するデータを設定して、「ActiveRecord::Base.transaction do」で1件ずつデータを登録していっているイメージです。created_atとupdated_atは自動で登録した日時が入ります。
データ登録実行
下記コマンドでseed.rbに記載したプログラムを実行しましょう。
1 |
rails db:seed |
データ確認
下記コマンドでsqlite3を起動し、SELECT文で結果を確認してみます。
1 |
rails dbconsole |
1 |
select * from tasks; |
下記のようにseed.rbで設定したデータが反映されていれば成功です。
1 2 3 4 5 |
sqlite> select * from tasks; 1|test||2020-02-25 14:55:12|2020-02-25 14:55:12 2|test2|test2 detail|2020-06-16 05:56:58.886945|2020-06-16 05:56:58.886945 3|test3|test3 detail|2020-06-16 05:56:58.888935|2020-06-16 05:56:58.888935 4|test4|test4 detail|2020-06-16 05:56:58.890159|2020-06-16 05:56:58.890159 |
次回はDBからデータを取得していけたらなと思います。
ありがとうございました。