Userモデルを自動生成する
前回、rails g devise:installコマンド実行時に提示された手順に従って、ビューファイルの生成をrails g devise:viewコマンドで行いました。
次に、データベースにユーザー情報を格納するDatabase Authenticatableモジュールの機能を使うために、さらにユーザー情報を格納するUserモデルをビュー同様にdeviseが提供するgenerateコマンドで作成します。
bin/rails g devise User
Running via Spring preloader in process 21678
invoke active_record
create db/migrate/20180321101835_devise_create_users.rb
create app/models/user.rb
invoke test_unit
create test/models/user_test.rb
create test/fixtures/users.yml
insert app/models/user.rb
route devise_for :users
なお、ユーザー情報を格納するモデルクラス名はUser以外を指定することも可能です。例えばMemberを指定すると、作成されるモデルクラスはapp/models/member.rbとなります。
実行結果から、モデルに対応するusersテーブルを作成するマイグレーションファイルや自動テスト用のファイルが生成されていることが分かります。まず、自動生成されたUserモデルを確認します。
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
end
deviseというDSLの後、deviseが提供するモジュールが指定されています。前回の表の通り、デフォルトで有効となっているのは:database_authenticatableなど6つです。デフォルトでは無効となっている:confirmableなどを有効にする場合は、deviseのDSLの後に追加で指定します。ここではデフォルト設定のままで進めます。
マイグレーションの実行
続いて、マイグレーションファイルを確認しましょう。
| モジュール | フィールド名 | データ型 | 意味 |
|---|---|---|---|
| Database authenticatable | string | ユーザー登録時のメールアドレス | |
| Database authenticatable | encrypted_password | string | 暗号化されたパスワード |
| Recoverable | reset_password_token | string | パスワードリセット時のトークン |
| Recoverable | reset_password_sent_at | datetime | パスワードリセットメール送信日時 |
| Rememberable | remember_created_at | datetime | [Remember me]チェックボックスをON |
| Trackable | sign_in_count | integer | ログインした回数 |
| Trackable | current_sign_in_at | datetime | 直近でログインした日時 |
| Trackable | current_sign_in_ip | inet | 直近でログインした接続元IP |
| Trackable | last_sign_in_at inet | inet | 前回ログインした接続元IP |
モジュールごとに使うカラムが定義されています。こちらもデフォルトで有効となっているモジュールで使うカラムのみ、コメントアウトが外されています。無効となっている機能を有効にする場合は、該当モジュールのコメントアウトを外してマイグレーションを実行します。ここではデフォルトのままで進めます。
以下のコマンドでマイグレーションを実行します。データベースを作成していない場合は先にデータベースを作成してください。
bin/rails g db:create # DB未作成なら実行 bin/rails g db:migrate
