1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Rails][devise]追加したカラムにストロングパラメーターを使えるようにしよう

Last updated at Posted at 2022-01-16

備忘録として

ユーザー管理機能を実装できるdevise
デフォルトとして「Eメールアドレス」「パスワード」のカラムがすでに存在しており、ストロングパラメーターも使用できるが、自分で追加するカラム(ユーザー名など)にはストロングパラメーターは使えない状態なので、使えるようように記述する必要がある。

前提

  • deviseを導入済み→deviseの導入手順
  • マイグレーションファイルでカラムを追加している

application_controller.rbファイル

すべてのコントローラーが継承しているファイル。
ここに処理を記述しておくことで、すべてのコントローラーで共通となる処理を作ることができる。
deviseの処理を行うコントローラーはGem内に記述されているため編集することができないので、このapplication_controller.rbを編集していく。

devise_parameter_sanitizerメソッド

deviseにおけるparamsのようなメソッド。deviseのUserモデルに関わる「ログイン」「新規登録」などのリクエストからパラメーターを取得できる。
このメソッドとpermitメソッドを組み合わせることにより、deviseに定義されているストロングパラメーターに対し、自分で新しく追加したカラムも指定して含めることができる
普通のストロングパラメーターと同じく、新たに定義するPrivateメソッドの中で使用します。

application_controller.rb
private
def configure_permitted_parameters  # メソッド名は慣習(自由につけても構わない)
  # deviseのUserモデルにパラメーターを許可
  devise_parameter_sanitizer.permit(:deviseの処理名, keys: [:許可するキー])#追加したカラムを記述
end

第一引数の処理名には、deviseですでに設定されているsign_in, sign_up, account_updateが使用できる。

処理名 役割
:sign_in サインイン(ログイン)の処理を行うとき
:sign_up サインアップ(新規登録)の処理を行うとき
:account_update アカウント情報更新の処理を行うとき

実際に編集してみる

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行目
before_actionifというオプションを使用している点に注目。
これは、値にメソッド名を指定することで、その戻り値がtrueであったときにのみ処理を実行するよう設定している。
今回は:devise_controller? というdeviseのヘルパーメソッドを指定して、もしdeviseに関するコントローラーの処理であれば、そのときだけconfigure_permitted_parametersメソッドを実行するように設定してる。

まとめ

  • 自身で追加したカラムでストロングパラメーターを使えるようにするには、特別な記述が必要
  • devise_parameter_sanitizerメソッドを使用する
  • application_controller.rb内に記述する

 
※補足等があればコメントいただけると幸いです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?