5
2

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 5 years have passed since last update.

Controllerのコールバックメソッド(before/after_action)

Posted at

#目的
Ruby on Railsでアプリを使用する際にコールバックメソッドを使用するが、詳細まで理解する必要があると思ったため備忘録的に残しておく。

#コールバックメソッドとは
オブジェクトの特定のタイミングで呼び出されるメソッドのこと。
その中でもよく使われるbefore/after_actionを紹介する。

#before_action,after_actionとは
Controllerでbefore_actionを定義することで、アクションの前後に処理(フィルター)を差し込むことが可能になります。
一般的に、複数のアクションで共通して必要になる処理などを定義することが多い。

####before_actionの使い方
Controllerにbefore_actionとして処理したいメソッドを定義します。
※after_actionも使い方は同一です。

blogs_controller.rb
class UsersController < ApplicationController
  before_action :set_blog
  ・・・
  def set_blog
    @blog = "before_actionの学習中"
  end
end
show.html.erb
<h1>Listing Users</h1>
<p>before_actionで定義した@blog: <%= @blog.id %></p>  <! ←この行を追加 >
<table>

</table>
<br><img width="653" alt="スクリーンショット 2019-10-10 22.45.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/509302/2ad90bd9-5974-cf20-9eff-eebef1b4de1b.png">

<%= link_to 'New User', new_blog_path %>

アプリケーションを起動した画面が以下になります。
上記で定義したset_blogメソッドの@blogの値が表示されていますね。
これによりアクションの前に処理を差し込むことができました。

スクリーンショット 2019-10-10 23.04.29.png

#only,excect,if,unlessオプション
railsの他のメソッド同様にオプションを持っています。

class UsersController < ApplicationController
  before_action :set_blog, only:[:new, edit]
end

上記のようにonlyオプションを使って書いた場合set_blogはnew,editアクションの前だけで実行されます。
exceptオプションは逆で指定したアクション以外でbefore_actionを実行します。

また、ifオプションはラムダを渡すことによって式がtrueの時だけ実行させることができます。
unlessオプションは式がtrue以外の時だけ実行される。

class UsersController < ApplicationController
# current_user.editable?がtrueの時に 
  before_action :set_blog, if: -> { current_user.editable? }
end

#まとめ
・before/after_actionはControllerの前後に処理を差し込むことができる
・only,except,if,unlessオプションを使うことで条件付きでコールバックを使用できる

5
2
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
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?