当記事では、プログラミング言語「Ruby」のフレームワーク「Rails」でよく利用するメソッド、「before_action」について解説します。
【目次】
before_actionとは?
アクション(メソッドとも呼びます、以降メソッドと記載します)を実行する前に呼ばれるメソッドのことです。
記述の仕方は・・・
before_action : メソッド名
です。
これを書くと、他のメソッドを呼ぶ前に、before_actionで指定したメソッドが呼ばれます👍
before_actionの使用例
railsアプリケーションのコントローラーに関して以下のコードをみてください。
class ApplicationController < ActionController::Base before_action :configure_permitted_parameters , if: :devise_controller? def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname, :avatar]) end end
上記のコントローラーですが、コードの流れを解説していきますね。
【基礎編】解説
class ApplicationController < ActionController::Base
1行目:まずクラスの宣言です。
「ApplicationControllerクラスと言うクラスがあるんだな」と思うだけで大丈夫です。
ちなみにですが、ApplicationController はActionControllerを継承していますね。
「 < ActionController::Base」のところです。
↑これは「継承」という意味でして、
ActionControllerで使用しているメソッドが、ApplicationController内でも使用可能。
という意味を持っています。
before_action :configure_permitted_parameters , if: :devise_controller?
2行目:早速、before_actionが出てきましたね。
書き方は先述の通り、「before_action :[呼びたいメソッド名]」でしたね。
そもそも・・・
「ナゼ、before_actionを使う必要があるのだろう・・・?」
と思った人もいるかもなので、そこは後ほど解説しますね。
def configure_permitted_parameters
3行目:シンプルに、「configure_permitted_parameters」メソッドの宣言です。
3行目の「configure_permitted_parameters」メソッドを呼ぶと・・・
直前に、before_actionで指定したメソッドが呼ばれます。(今回ですと、configure_permitted_parametersメソッドですね)
以上がコードの流れとなります。
ここまで把握しておけば、before_actionについての基礎理解は十分だと思います👍
【応用編】解説
ここからは、少し難しいかもです。
class ApplicationController < ActionController::Base before_action :configure_permitted_parameters , if: :devise_controller? def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname, :avatar]) end end
上記コードの2行目後半に記載している、「if: :devise_controller?」のコードについてです。
「if: :devise_controller?」を含めた、2行目のコードの意味とは・・・
❗️最初に呼び出したメソッドが「devise_controller」内に存在するメソッドならば、「configure_permitted_parameters」メソッドを実行する
という意味です。
メソッドが呼ばれる時、そのメソッドが所属するコントローラーが、「devise_controller」であれば、before_actionで指定したメソッドが実行されるようになっています。
もちろん、devise_controllerに所属しないメソッドだった場合は、before_actionで指定したメソッドは実行されません。
【流し読みでOK】捕捉
以下はさらに難しいです。
興味ある方は読んでみてくださいね。
class ApplicationController < ActionController::Base before_action :configure_permitted_parameters , if: :devise_controller? def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname, :avatar]) end end
上記コードの4行目についてです。
3行目のconfigure_permitted_parametersメソッド内で、devise_parameter_sanitizerメソッドを呼んでいますね。
この「devise_parameter_sanitizer」というメソッドは、実はrailsで元々用意されているメソッドです。
つまり、4行目が何をしているかと言うと・・・
サインアップ(:sign_up)時に、入力した内容(:nickname, :avatar)を許可(permit)。
という事をやっています。
要は、devise_parameter_sanitizerを使うことで、
例えば、会員情報の登録廻りの機能を、簡単に作れるようになりますよ。
【最後に】before_actionを使う理由とは?
例えば、開発していく上で必ず、複数のメソッド内で共通の処理を実行しなけらればならないという状況が発生します。
この状況を打開するために、before_actionメソッドがあります。
before_actionを書くことで、他メソッドを実行する前にbefore_actionで宣言したメソッドを、優先して実行します。
つまり、同じコード(共通で実行する必要があるメソッド)を書く手間が省け、開発効率もあがりますよね。
ぜひ、覚えておきたいメソッドです!
記事は以上です、ありがとうございました!