###環境
ruby 2.6.3
rails 2.6
cloud9
Gem:devise
###この記事の目標
Devise(Gem)でUserテーブルを作成し、ユーザーネームを新規登録(Sign up)で登録できるようにする
#1 DeviseでUserテーブルを作成
Deviseを使用するとユーザーテーブルを簡単作成してくれます。
まず初めにモデルを作成。
Deviseを使用する場合のモデル作成コマンド(今回はUserモデル)
$rails g devise User
※通常のモデル作成コマンド
$rails g model モデル名
記述方法が違うので注意
コマンドを実行すると作成される
ファイル
1.モデル(User)
2.マイグレーションファイル
#2 任意のカラムを追加する
ユーザーネームを保存するためのカラム(name)がないので追加します。
1で作成したマイグレーションファイルを開く
※ファイルの場所は dbファイル内 migrate/作成日時
マイグレーションファイルに t.string :name を追加しました。
データ型 :追加するカラム名
#3 データベースにマイグレーションする
$ rails db:migrate
コマンド実行後にルーティングを確認します。
routes.rbに ルーティングが自動追加されました。
#4 strong parametersを設定する
追加したnameカラムをsign up時に変更許可する設定を行います。
Deviseのコントローラはライブラリで用意されているため直接変更ができません。
そのためapplication_controllerに記述します。
before_action :configure_permitted_parameters, if: :devise_controller?
before_action :configure_permitted_parameters,
→後ろのif文の条件だったら実行の前にconfigure_permitted_parametersアクションを実行する
ではif: :devise_controller?とは何か?
→deviseのコントローラーが呼び出されたら(動いたら)
まとめると、
deviseコントローラーが動く前にconfigure_permitted_parametersアクションを実行しましょう という意味になります。
次に、configure_permitted_parametersアクションの内容を記述します。
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys:[:name])
end
devise_parameter_sanitizer.permit(:deviseの処理名, keys: [:許可するカラム名])
devise_parameter_sanitizer
→sanitizerメソッドはUserモデルのパラメーター(情報)を取得するメソッド
permit(:sign_up, keys:[:name])
→sign_up時にnameのデータ操作を許可
before_actionからまとめると、
deviseコントローラーが呼び出された時、nameの変更を許可しますよ といった感じになります。
#5 viewの変更
nameを使用する準備ができました。
しかしまだ入力部分がありませんので修正していきます。
deviseであらかじめ準備されているviewのカスタマイズを行います。
$ rails g devise:views
実行したら作成されたdevise/registrations/new.html.erbフォルダを変更していきます。
<h2>Sign up</h2>
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= render "devise/shared/error_messages", resource: resource %>
#↓追加
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name, autofocus: true %>
</div>
'
'
ブラウザで確認します。
Nameが追加されました!
Deviseであらかじめ準備されているコントローラやビューの変更は通常とコードが異なるので注意