実践の場で役立つ!Ruby on Railsのbefore_actionの使い方【初心者向け】
Ruby on Railsで使うbefore_actionの使い方に関する記事です。railsではcontrollerでbefore_actionを定義することで、アクションの前に処理を差し込むことができます。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
監修してくれたメンター
mentor-hakamata
C#, Ruby, Python, JavaScriptなど経験。
初心者向けにRubyのフレームワークRailsで使えるbefore_actionの書き方について、テックアカデミーのメンター(現役エンジニア)が実際のコードを使用して初心者向けに解説します。
railsではcontrollerでbefore_actionを定義することで、アクションの前に処理を差し込むことができます。
目次
- before_actionとは
- before_actionでの複数メソッドの指定方法
- before_actionの各オプション
- 実際にbefore_actionを書いてみよう
- まとめ
- Ruby on Railsを学習中の方へ
Rubyについてそもそもよく分からないという方は、Rubyとは何なのか解説した記事を読むとさらに理解が深まります。
今回はRuby on Railsのbefore_actionについて説明するよ。
田島メンター!!before_actionというのは何をするんですか~?
before_actionはアクションの前に指定の処理を入れることができるものだよ。例えばユーザーがまだログインしていない場合に、ログイン画面に行ってもらうというようなことを設定するのにも使えるね。
なるほど、実際によく見るやつですね。お願いします!
before_actionとは
railsではcontrollerでbefore_actionを定義することで、アクションの前に処理を差し込むことができます。
一般的に、複数のアクションで共通して必要になる処理などをbefore_actionで定義することが多いです。
例えば、ログイン機能があるアプリケーションでは、各アクションでユーザーがログインしているかのチェックを行う必要があります。
このようなときに、ログイン認証の処理をbefore_actionとして定義しておけば、各アクションにリクエストが来た時に、最初にログイン認証を行って、その後に各アクション独自の処理をするといったことが可能になります。
before_actionの使い方
before_actionの使い方は次のようになります。controllerにbefore_actionとして処理したいメソッドを定義して、controllerのclass定義の下に次の書式でbefore_actionを定義します。
class SampleController < ApplicationController before_action :メソッド名 ・・・ def メソッド名 ・・・ end end
たったこれだけで、アクションの前に指定したメソッドの処理を差し込むことができます。
before_actionでの複数メソッドの指定方法
before_actionには複数のメソッド指定することも可能です。
class SampleController < ApplicationController before_action :メソッド1, メソッド2 end
このように記載するとメソッド1、メソッド2の順番で実行されます。
また
class SampleController < ApplicationController before_action :メソッド1 before_action :メソッド2 end
このように分けて書くこともできます。
こちらも同じようにメソッド1、メソッド2の順番で実行されます。
before_actionの各オプション
before_actionの各オプションとして、4つのオプションをご紹介します。
- only
- except
- if
- unless
それぞれのオプションについて以下で解説します。
only
onlyオプションでは、決まったアクションの前だけに処理を差し込むことができます。
class SampleController < ApplicationController before_action :メソッド1, only: :index end
この場合は、indexアクションのみ前処理としてメソッド1が実行されます。
except
exceptオプションでは、決まったアクションだけbefore_actionに指定した処理を実行しないようにできます。
class SampleController < ApplicationController before_action :メソッド1, only: :index end
この場合は、indexアクション以外のアクションの前処理としてメソッド1が実行されます。
indexアクションの場合はメソッド1は実行されません。
if
ifオプションでは、条件に応じて前処理を差し込むことができます。
class SampleController < ApplicationController before_action :メソッド1, if: :メソッド2 end
この場合は、メソッド2の結果がtrueの場合にメソッド1が実行されます。
unless
unlessオプションもifオプションと同様、条件に応じて前処理を差し込むことができます。
class SampleController < ApplicationController before_action :メソッド1, unless: :メソッド2 end
ifオプションと異なり、メソッド2の結果がfalseの場合にメソッド1が実行されます。
app/controllersからbefore_actionを追加したいコントローラーを開き、そこに入力していくよ。
ここで何の処理をはさみたいかを設定するんですね。
では実際に、簡単な例でbefore_actionを実行してみよう。
実際にbefore_actionを書いてみよう
まず、サンプルアプリケーションをscaffoldで作成します。
以下のコマンドを実行してください。
$ rails new sample_app $ cd sample_app $ rails generate scaffold User name:string $ rails db:migrate
では、サンプルとしてusers_controller.rbにset_textという変数に文字列を代入する処理をbefore_actionとして定義してみましょう。
まず、 app/controllers/users_controller.rbをテキストエディターで開いて、「private」と書かれているコードの下に次のコードを書きます。
def set_text @text = 'hello, world.' end
次に、このメソッドをbefore_actionとして定義します。
before_action :set_text
これでusers_controllerのどのアクションにアクセスが来ても変数@textに値が代入されるようになったので、変数@textをビューに表示して確認してみましょう。
まず、「app/views/users/index.html.erb」に次の変更を加えます。
<h1>Listing Users</h1> <p>before_actionで定義した@text: <%= @text %></p> <!— ←この行を追加 —> <table> ・・・ </table> <br> <%= link_to 'New User', new_user_path %>
変更したら次のコマンドを実行してrailsアプリケーションを起動します。
$ rails server
アプリケーションが起動したら、ブラウザで「http://localhost:3000/users」にアクセスしてみます。
「before_actionで定義した@text: hello, world.」と表示されているのが確認できると思います。
このようにbefore_actionを定義することでcontrollerのアクションの前にさまざまな処理を追加することができます。
以上、before_actionの説明でした。
まとめ
本記事では、before_actionの使い方について解説しました。
- before_actionとは
- before_actionの使い方
- 複数メソッドの指定方法
- before_actionの各オプション
before_actionを理解することで、適切なタイミングで処理を実現できます。
ぜひ使いこなせるように覚えておきましょう。
今回は短い文字列を変数に代入し、それをビューに表示してみたよ。
実行した画面を見ると、一番上に代入した文字列が表示されているのが分かりますね。
before_actionとは別にafter_actionというのも存在するんだ。これはアクションの実行後に処理を入れるというものなので、一緒に覚えておこう。
分かりました!
Ruby on Railsを学習中の方へ
これで解説は終了です、お疲れさまでした。
- つまずかず「効率的に」学びたい
- 副業や転職後の「現場で使える」知識やスキルを身につけたい
プログラミングを学習していて、このように思ったことはありませんか?
テックアカデミーのWebアプリケーションコースでは、第一線で活躍する「プロのエンジニア」が教えているので、効率的に実践的なスキルを完全オンラインでしっかり習得できます。
合格率10%の選考を通過した、選ばれたエンジニアの手厚いサポートを受けながら、Ruby on Railsを使ったWebアプリケーション開発を学べます。
まずは一度、無料体験で学習の悩みや今後のキャリアについて話してみて、「現役エンジニアから教わること」を実感してみてください。
時間がない方、深く知ってから体験してみたい方は、今スグ見られる説明動画から先に視聴することをおすすめします!