deviseにおいて登録したい項目を追加する方法
deviseの導入
deviseはRailsのgemの一つで簡単にユーザー管理機能を実装できます。
まずGemfileに記述をします。
gem 'devise'
忘れずにbundle installしましょう!
次にdeviseの設定ファイルを生成します。
ターミナルにて以下のコマンド入力します。
rails g devise:install
次にuserモデルの作成を行いますがdeviseを利用する為に、通常のコマンドとは異なります。
ターミナルにて以下のコマンド入力します。
rails g devise user
これにより、マイグレーションファイルの生成やroutes.rbファイルにルーティングの記述が自動的に行われており、新規登録やログインのルーティンが設定されています。
routes.rb
Rails.application.routes.draw do devise_for :users #自動で追記 end
rails routesで設定されているルーティングを確認すると、
sessionやらregistrationやらとルーティングがしっかり設定されています!
では次に、生成されたマイグレーションファイルに追記を行います。
deviseではemailとpasswordについてあらかじめ設定されています。
今回はnameカラムを追加してみましょう。
マイグレーションファイル
. . t.string :email, null: false, default: "" t.string :encrypted_password, null: false, default: "" t.string :name #追記 . .
忘れずにマイグレートしましょう。
最後に実際に新規登録画面を確認しましょう!
http://localhost:3000/users/sign_upにアクセスします!
このように最低限ではありますが、自動的にビューも整っています。
いい感じになっていると思いきや、追加したnameの欄がありません。
残念ながらマイグレーションファイルに追記しただけではdeviseの機能には反映されません。
追加の項目を反映させるには(ビュー画面編)
まずビューにnameの登録欄を作成しましょう!
実は、今までの過程でdeviseのビュー画面は生成さてていません。
ターミナル
rails g devise:views
これでapp/views/deviseの各ディレクトリ内にファイルが生成されます。
今回は新規登録画面を編集するので、registrations内のnewファイルに追記します。
<div class="field"> <%= f.label :name %><br /> <%= f.text_field :name, autofocus: true, autocomplete: "name" %> </div>
ビューにも反映されました!
しかしこのままではまだデータベースに登録はされません。
なぜならストロングパラメーターを設定していないからです。
追加の項目を反映させるには(ストロングパラメーター編)
deviseに追加の項目を設定した場合、app/controllers/application_controller.rbを編集します。
class ApplicationController < ActionController::Base before_action :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:name]) end end
sign_upアクションのnameキーを許可するように記述しました。
これでデータベースにも反映されるようになりました!
因みに、今回は新規登録のみなのでsign_upアクションのみ許可しましたが、登録内容の編集を反映させたいときはaccount_updateアクションについても記述しないと変更内容が保存されないので注意です。