デバイズ機能を使うとユーザー管理がしやすくなる!
rails g devise user の命令をターミナル上で出すと、ログイン画面とサインアップ画面が生成される。
しかしビューファイルとして生成はしない!
これは、deviseのGem内に存在するビューファイルを読み込んでいるから!
そこで、deviseのビューファイルをコピーし、devise用のビューファイルを用意する。
命令としては rails g devise:views
すると、
app/views/devise/registrations/new.html.erb
app/views/devise/sessions/new.html.erb
2つビューファイルが出来上がるが、サインアップ画面が上、ログイン画面が下に対応する!
ファイル名が同じでもpathが違う
すでに作成されたテーブルの内容を変更する場合は rails g migration コマンドを行う
rails g migration Addカラム名To追加先テーブル名 追加するカラム:型
<サインアップ画面の編集>
・maxlengthオプション
→inputタグを生成するヘルパーメソッド
ストロングパラメーターの扱い
→deviseに関しても受け取れるパラメーターをコントローラーで制限する!
しかし、deviseの処理を行うコントローラーはGem内に記述されているので編集できない!
そこで、
①deviseのコントローラーにストロングパラメーターを反映する方法
②devise特有のパラメーターを取得する方法
が必要になる。
②devise特有のパラメーターを取得する方法
→devise__parameter_sanitizerメソッドを使う
private
def configure_permitted_parameters # メソッド名は慣習
deviseのUserモデルにパラメーターを許可
devise_parameter_sanitizer.permit(:deviseの処理名, keys: [:許可するキー])
end
→引数の部分が今までと違う
deviseの処理には、 :sign_in :sign_up :account_update などがある
ストロングパラメーターを追加するコードはapplication_controller.rb に記載する
(例)
private
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname])
end
これは、sign_up(新規登録の処理)をする時、nicknameというキーのパラメーターを許可するもの!
このままだと、devise機能を使わない時も実行されてしまう(?)ので、ifというオプションを使う。
before_action :configure_permitted_parameters, if: :devise_controller?
デバイズに関するコントローラーの処理の時だけconfigure_permitted_parametersを実行する!
tweetsテーブルにカラムを追加する方法(すでにテーブルができている時)
→ rails g migration AddUserIdToTweets user_id:integer
→ rails db:migrate