こんにちは。Web開発6週目、Rails初心者の あをか です。
初心者にとってdeviceというgemはブラックボックスで、何がどう繋がっているのか把握しづらかったです。
復習も兼ねて、deviceの導入過程を書いていきます。
■ ログイン機能(device)
①deviceを入れてモデルとテーブルを作ろう
gem 'device'とGemFileに書き、
ターミナルで①bundle install➡②rails g devise:installする。
続いてログイン機能で欠かせないuser情報を扱うために、モデルとテーブルを作成したい。
rails g model User string:name, string:email,...かと思いきや、deviceの時は違う。
rails g devise UserだけでUserテーブルの中身まで作成してくれる。
ただしdeviceで作成したテーブルのカラムは、デフォルトではemailとpasswordだけ。
ユーザー名を管理したい場合、
db/migrateの下にあるマイグレーションファイルにt.string :nameと追記する。
(その他userテーブルで管理したいものはこの時に全て書いておくこと)
マイグレーションファイルへの追記が終わったら、rails db:migrateする。
(rails db:migrateをした後に間違いが見つかると少しめんどくさい。このコマンドで、この時のマイグレーションファイルがschemaファイルに反映され、マイグレーションファイルは読み取り専用になるから。ちなみにschemaファイルは現在のテーブル一覧が分かるので便利。
※詳しくは➡https://qiita.com/kakiuchis/items/2ed1604557ee29bbcbf7
※カラムを変えたくなったら➡https://qiita.com/azusanakano/items/a2847e4e582b9a627e3a)
②routesファイルとUserモデルを確認しよう(見るだけ)
routes.rbにdevise_for :usersと書かれているはず。
user.rbに devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatableと書かれているはず。
③ユーザー登録画面とログイン画面のレイアウト
app/views/devise/registrations/new.html.erbがユーザー登録画面、
app/views/devise/sessions/new.html.erbがログイン画面。
適宜編集しましょう。name入力フォームを作る時はtext_field使うのに注意。emaiilとpasswordが特殊なんです。
④deviceのコントローラはどこ・・?
結論から申しますと、deviceコントローラは触る事ができません(存在はするようです)。
で、どうするかというと、application_controllerで操作します。
1~4行目・13~16行目を書きましょう。
privateではなくprotectedなのは、別のコントローラからも操作できるように。
(5~11行目はログイン・ログアウト後のルートを変えたい場合の記述)
⑤バリデーション
userテーブルのnameカラムにバリデーションを設定したいので、
models/user.rbに記述する。
以上、device導入の備忘録でした。
初心者なので間違い等あるかもしれませんが、その際は教えて下さると幸いです!!