【sign_up編①】registrations_controllerのvalidate_sign_up_paramsの解説

rails

本記事では、signup(registrationsコントローラのcreateアクション)時に最初に行われる

before_action :validate_sign_up_params, only: :create

こちらのメソッドの解説をしていきたいと思います。

devise_token_authの処理を一つ一つ学んでいけるよう記事を作成中ですので、よければ参考にしていただければと思います。

vaidate_sign_up_paramsのソースコードについて

ソースコードは以下にあります。

vaidate_sign_up_paramsのソースコードを追う

# 6行目
before_action :validate_sign_up_params, only: :create 

※上記の行数はソースコードの行数を示しています。今後更新されるかも知れませんがご容赦ください。

only: :createから、createアクションのみに適用されるメソッド。まずは、validate_sign_up_paramsメソッドのソースを探します。

# (1) validate_sign_up_params 189行目
def validate_sign_up_params
  validate_post_data sign_up_params, I18n.t('errors.messages.validate_sign_up_params')
end

(1)validate_sign_up_paramsについて、当初、関数が連続していて見慣れない書き方だなあと思ったのですが、validate_post_dataの引数にsign_up_paramsとI18nを指定しているだけで、下記と同義のようです。

# (1)validate_sign_up_paramsの中身を修正
validate_post_data(sign_up_params, I18n.t('errors.messages.validate_sign_up_params'))

ということで、(1-1)validate_post_data関数を見ていきます。

# (1-1)validate_post_data 197行目
def validate_post_data which, message
  render_error(:unprocessable_entity, message, status: 'error') if which.empty?
end

上記の処理は、whichには第一引数であるsign_up_paramsが入り、sign_up_paramsの中身が空の場合、render_errorメソッドでUnprocessable Entity(422エラー)が発生し、 I18n.t('errors.messages.validate_sign_up_params')メッセージを返すよっていう処理のようです。

それでは続いて、(2)sign_up_paramsを見てみると、

# (1-2)sign_up_params 91行目
def sign_up_params
  params.permit(*params_for_resource(:sign_up))
end

(2-1)*params_for_resource(:sign_up)を許可するみたいです。params_for_resourceは、sign_up時にpermitするシンボルを作成する処理になります。今回はこの部分の処理はあまり関係ないので割愛します。

(1-1)で、sign_up_paramsがemptyの場合にエラーを返すので、そもそも、リクエスト側からparamsを受け取れない場合にエラーを返します。

validate_account_update_paramsは結局何やっているの?

以上、まとめると、validate_account_update_paramsは、sign_up時にparamsが渡されなかった時にエラーを返す処理になっています。

特にバリデーションがあるわけではなく、リクエスト時に何らかの理由でparam自体が送られてこなかった場合に返すエラーのようです。

コメント

タイトルとURLをコピーしました