2つのdeviseを作成した時にdevise_parameter_sanitizerを個別に設定したい
2つのdeviseを作成し、個別devise_parameter_sanitizerの設定をしたい時の手順を書きます。
オリジナルアプリケーション作成中です。
ruby '2.6.5'
rails '6.0.0'
まず前提条件として各deviseの、ルーティング、モデル、コントローラー、ビューの設定ができている状態でスタートします。
上記作成方法はこちらを参考にしてください。
さて通常1つのアプリケーションに対して1つのdeviseであれば、application_controller.rbファイルにbefore_actionを使ってdevise_parameter_sanitizerの処理を行います。
app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
private
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname])
end
end
この様にしてユーザー登録の際に特定のカラムを許容する事ができます。
2つのdeviseを作成した時に別々のモデルのdevise_parameter_sanitizerの設定方法です。
今回はuserとdoctorとの2つのdeviseを作りました。
まずリポジトリのREADMEにあるので試してみたがいまいちピンとこない。継承するファイルを作るのか、既存のファイルを活用するのかわかりませんでした。
結果として個別のファイルは app/controllers/users/registrations_controller.rb があるのでそれを使う。
User用であれば、
app/controllers/users/registrations_controller.rb
Doctor用であれば、
app/controllers/doctors/registrations_controller.rb
user用ファイルの中身の大量のコメントアウトから下記の記述を見つけます。
# before_action :configure_sign_up_params, only: [:create]
のコメントを有効化します。
.
↓
before_action :configure_sign_up_params, only: [:create]
これで、ユーザー作成時は、
configure_sign_up_paramsが呼び出されるようになりましたので、
同ファイル中にある、
def configure_sign_up_params
をコメントアウトし、有効にします。
def configure_sign_up_params
devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname])
end
そしてこちらの(:sign_up, keys: [:nickname])の部分に追加したいからむを書きます。
def configure_sign_up_params
devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname, :password])
end
これと同様の作業をdoctor様でも行います。
ファイルはapp/controllers/doctors/registrations_controller.rb です。
お気づきの方もいるとは思いますが、applicationコントローラーでは定義せず、個別ファイルでbefore_actionで呼び出しするのでapp/controllers/application_controller.rb で devise_parameter_sanitizeは書きません。
上記を行った際に
TypeError
superclass mismatch for class DoctorController
class DoctorController < ApplicationController
とエラーになりました。よーく見ると、
class DoctorController < ApplicationControllerがDoctorになっています。
class DoctorController < ApplicationController
class DoctorsController < ApplicationController
app/controllers/doctors/registrations_controller.rbに継承するので""s""がないので記述します。
rails は命名規則が厳しので、気おつけます!!
Author And Source
この問題について(2つのdeviseを作成した時にdevise_parameter_sanitizerを個別に設定したい), 我々は、より多くの情報をここで見つけました https://qiita.com/kinpin/items/21b1badcfe19aca84038著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .