今回達成すること
今回は、ユーザーテーブルを作成していきます。
今回作成するカラム
今回作成するカラムは、①email、②password_digest、③activated、④admin となります。
company関連は、会社テーブルを作成した後に関連付けを行います。
最終的なユーザーテーブルはこのようになります。
カラム名 | 型 | デフォルト | 長さ | NULL | 内容 |
---|---|---|---|---|---|
① email | string | 255 | false | ||
② password_digest | string | 72 | false | ||
③ activated | boolean | false | false | 認証フラグ | |
④ admin | boolean | false | false | 管理者フラグ | |
⑤ company_id | FK | 選択中の会社ID | |||
⑥ company_count | integer | 0 | false | 会社の保有数 |
この記事の読み方
このカテゴリー「Rails apiとNuxt.jsでSPA開発」では、RailsとNuxt.jsに対するコマンドを以下のように分けています。
- Railsに対するコマンド
myapp $ コマンド
- Nuxt.jsに対するコマンド
frontend $ コマンド
今回はテーブル作成なので、Railsプロジェクト上でしか作業を行いません。
作業開始。まずはブランチの作成
最初にブランチを作成して、移動しておきましょう。
myapp $ git checkout -b user_modeling
myapp $ git branch
...
* user_modeling
OK!新しいブランチに移動しました。
ユーザーモデルの作成
ユーザーモデルを作成します。
rails generate
コマンドを実行することで、テーブルを操作するモデルを作成することができます。
省略記法はrails g
です。
myapp $ rails g model user
ファイルが作成されました。
Running via Spring preloader in process 57141
invoke active_record
create db/migrate/20191105003048_create_users.rb
create app/models/user.rb
invoke test_unit
create test/models/user_test.rb
create test/fixtures/users.yml
次はカラムの作成です。
ちなみにここのファイル群は「マイグレーションファイル」と呼びます。
db/migrate/タイムスタンプ_create_users.rb
class CreateUsers < ActiveRecord::Migration[6.0]
def change
create_table :users do |t|
t.string :email, null: false
t.string :password_digest, null: false
t.boolean :activated, null: false, default: false
t.boolean :admin, null: false, default: false
t.timestamps
end
end
end
-
null: false
Null制約を付ける設定です。
これによりカラムにNullを保存できないようになります。
-
default: false
初期値を指定する設定です。
初期値を設定しておくことで、データ作成時にわざわざ値を指定しなくても良くなりますし、Nullが格納される心配もなくなります。
さあ、上記編集が完了したらコマンドを実行してテーブルを作成します。
myapp $ rails db:migrate
無事作成されました。
== 20191105003048 CreateUsers: migrating ======================================
-- create_table(:users)
-> 0.0326s
== 20191105003048 CreateUsers: migrated (0.0456s) =============================
もし、編集を失敗してコマンドを実行した場合
もし、マイグレーションファイルの編集を失敗してrails db:migrate
を実行した場合。
再度、マイグレーションをやり直す必要があります。その時のコマンドは↓
myapp $ rails db:migrate:reset
テーブルをリセットするので、テーブル内のデータも全て削除されます。
その点だけ覚えておいてください。
ユーザーテーブルを確認する
今回はrails console
コマンドで確認を行います。
なお、省略記法はrails c
です。
- consoleに移動
myapp $ rails c
- ユーザーカラム名の確認
irb(main):002:0> User.column_names
=> ["id", "email", "password_digest", "activated", "admin", "created_at", "updated_at"]
OK!うまくできているようです。
- consoleから抜ける
irb(main):002:0> exit
rails dbで確認する方法
こっちの方が王道ですので、紹介しておきます。
- SQLiteにログイン
myapp $ rails db
- 現在のテーブル確認
sqlite> .tables
ar_internal_metadata schema_migrations users
OK!usersテーブルが存在しますね。
- カラムの確認
sqlite> .schema users
CREATE TABLE IF NOT EXISTS "users" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "email" varchar NOT NULL, "password_digest" varchar NOT NULL, "activated" boolean DEFAULT 0 NOT NULL, "admin" boolean DEFAULT 0 NOT NULL, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL);
ユーザーテーブルの制約まで表示されます。
より詳しくテーブルの確認を行い方は、rails db
コマンドをおすすめします。
- SQLiteから抜ける
sqlite> .quit
今回はここまで
ちょっと短くなってしまいましたが、今回はここまで。
ユーザーモデルを作成することができました。
さて次回は?
さて次回は、ユーザーモデルのバリデーションを行なっていきます。
同じ記事に書こうと思いましたが、ちょっと(と言うか、だいぶ)長くなりそうなので一旦区切りらせていただきました。
それではまた次回。