今回は、Railsにユーザー管理機能を追加するために、
deviseというGemを使って実装する流れを勉強しました。
初学者なりに手順を整理してみたので、同じくこれから学ぶ方の参考になれば嬉しいです!
1. deviseを導入してUserモデルを作成する
まずは、認証機能を簡単に実装できるgem「devise」を使えるようにしていきます。
① Gemfileに追記してインストール
gem 'devise'
そのあとターミナルで
bundle install
を実行します。
② deviseの設定ファイルを作成する
rails generate devise:install
実行後、ターミナルに表示される指示(Mailer設定など)も忘れずに対応しておきます。
③ Userモデルを作成する
rails generate devise User
これでdevise対応のUserモデルができるので、
rails db:migrate
でマイグレーションを適用します。
2. 新規登録画面をカスタマイズする
続いて、新規登録画面を作って名前も登録できるようにしていきます。
① deviseのビューを作成
デフォルトのビューをカスタマイズするために、まずファイルをコピーします。
rails generate devise:views
これでapp/views/devise/フォルダが作られます。
② 新規登録フォームを編集
app/views/devise/registrations/new.html.erbに、以下のようにfirst_nameとlast_nameの入力欄を追加しました。
<div class="field">
<%= f.label :first_name %><br />
<%= f.text_field :first_name, maxlength: 6 %>
</div>
<div class="field">
<%= f.label :last_name %><br />
<%= f.text_field :last_name, maxlength: 6 %>
</div>
ポイント:
maxlength: 6で、最大6文字以内に制限しています。
3. Userモデルに「first_name」と「last_name」カラムを追加する
データベースにも名前を保存できるように、Userモデルにカラムを追加します。
① マイグレーションファイルを作成
rails generate migration AddNameToUsers first_name:string last_name:string
② マイグレーションを実行
rails db:migrate
これで、Userテーブルにfirst_nameとlast_nameのカラムが追加されました!
4. パラメータ許可の設定をする
deviseではセキュリティのため、許可したパラメータしか受け付けません。
なので、first_nameとlast_nameも許可する設定をします。
① ApplicationControllerを編集
app/controllers/application_controller.rbに以下を追加しました。
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name])
end
これで新規登録時に、名前も保存できるようになります!
学んだこと・気をつけたこと
deviseはかなり便利だけど、「パラメータ許可」を忘れるとカラム追加しても保存できないので注意!
入力制限(maxlength)も意識して、バリデーションを補助できる
ターミナルでの指示(特にrails generate devise:install後)は、しっかり読む
まとめ
今回の流れはこの通りです。
1.deviseをインストールしてUserモデルを作成
2.ビューを生成して新規登録フォームを編集
3.Userモデルにfirst_nameとlast_nameカラムを追加
4.パラメータ許可設定をして保存できるようにする
初めてでも、ひとつひとつ順番に進めればちゃんと動かすことができました!