LoginSignup
2
3

More than 3 years have passed since last update.

【Rails】device機能【備忘録】

Posted at

こんにちは。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
と書かれているはず。

③ユーザー登録画面とログイン画面のレイアウト

 image.png
 app/views/devise/registrations/new.html.erbがユーザー登録画面、
 app/views/devise/sessions/new.html.erbがログイン画面。
 適宜編集しましょう。name入力フォームを作る時はtext_field使うのに注意。emaiilとpasswordが特殊なんです。

④deviceのコントローラはどこ・・?

 結論から申しますと、deviceコントローラは触る事ができません(存在はするようです)。
 で、どうするかというと、application_controllerで操作します。
image.png
 1~4行目・13~16行目を書きましょう。
 privateではなくprotectedなのは、別のコントローラからも操作できるように。
 (5~11行目はログイン・ログアウト後のルートを変えたい場合の記述)

⑤バリデーション

 userテーブルのnameカラムにバリデーションを設定したいので、
 models/user.rbに記述する。
image.png

以上、device導入の備忘録でした。
初心者なので間違い等あるかもしれませんが、その際は教えて下さると幸いです!!

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3