質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Q&A

解決済

3回答

2671閲覧

複数モデルを利用したdeviseのdevise_parameter_sanitizerで追加したいカラムの設定について

kinpin

総合スコア4

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

0グッド

1クリップ

投稿2020/08/27 10:32

ruby  '2.6.5'
rails  '6.0.0’
mysql2 '0.5.3'

アプリケーションを作っています。

二つのdeviseを作成し、userとdoctorでログイン機能を2つ作成しています。

解決したいことは
アプリケーションコントローラーでdevise_parameter_sanitizeを使って新しいカラムを許可する際に2つのモデルに違うからむを許可する方法で詰まっています。

様々な文献から探しましたが、バージョンが古いのでどうしてもうまくいきません。

application_controller.rb

1 2class ApplicationController < ActionController::Base 3 before_action :basic_auth 4 before_action :configure_permitted_parameters, if: :devise_controller? 5 6 private 7 8 def basic_auth 9 authenticate_or_request_with_http_basic do |username, password| 10 username == ENV['BASIC_AUTH_USER'] && password == ENV['BASIC_AUTH_PASSWORD'] 11 end 12 end 13 14 def configure_permitted_parameters 15 devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname, :gender_id, :birth, :bloodtype_id, :emergencyperson, :emergencycall]) 16 end 17end 18

以下の部分はdeviseのdoctorモデルに許可したいカラムです。

def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:doctor_name, :experience, :special_field, :message, :image]) end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

リンク内容

こちらの方法にまとめてみました。

投稿2020/08/28 09:28

kinpin

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

https://qiita.com/kinpin/items/21b1badcfe19aca84038

こちらの方法にまとめてみました。

投稿2020/08/28 09:26

kinpin

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

様々な文献から探しましたが、バージョンが古いのでどうしてもうまくいきません。

リポジトリのREADMEにありますが、試されましたか?
https://github.com/heartcombo/devise#strong-parameters

下記は引用です。

ruby

1class User::ParameterSanitizer < Devise::ParameterSanitizer 2 def initialize(*) 3 super 4 permit(:sign_up, keys: [:username, :email]) 5 end 6end

ruby

1class ApplicationController < ActionController::Base 2 protected 3 4 def devise_parameter_sanitizer 5 if resource_class == User 6 User::ParameterSanitizer.new(User, :user, params) 7 else 8 super # Use the default one 9 end 10 end 11end

READMEのUser::ParameterSanitizerに従って、Doctor::ParameterSanitizerを作成、ApplicationController#devise_parameter_sanitizer内でUserと同様に、Doctorで分岐して、作成したSanitizerを呼び出せばいけるのではないでしょうか。

投稿2020/08/27 13:53

Cojiro

総合スコア539

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kinpin

2020/08/27 15:12

回答ありがとうございます。 ``` class User::ParameterSanitizer < Devise::ParameterSanitizer def sign_in default_params.permit(:username, :email) end end ``` はどのファイルに書くのでしょうか?継承という事で class Users::RegistrationsController < Devise::RegistrationsController などがあるディレクトリにファイルを作るのでしょうか? 基本的な事を伺ってすみません。。
Cojiro

2020/08/27 15:55

読み込まれるところならどこに配置してもいいと思います。 例の通りで、何も変更せずにできそうなのは、 conrollers/user/parameter_sanitizer.rb とかでしょうか。 ここが最適ではない気がしますが、最適な場所は知識がついてきてからご自身で考えられると良いかと思います。
kinpin

2020/08/28 09:25

コメントありがとうございます! いくつか試したのですがこの方法がうまくいきました。 User用であれば、 app/controllers/users/registrations_controller.rb Doctor用であれば、 app/controllers/doctors/registrations_controller.rb にある記述をコメントアウトする方法です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問