意識低いRuby on Rails再入門6 ~ログイン必須のControllerを作りたい~
2015/07/03
ログイン状態を取得するためのSessionsHelperを前に書いた
新規投稿画面を表示したり、実際に投稿するときにはログイン必須であることを保証したい。
ログインしていない状態でアクセスが来たらログイン画面に遷移させたい。
この要件を満たすためにログインが必須なControllerにbefore_actionという仕組みを利用して実装する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
class ItemsController < ApplicationController before_action :sign_in_user, only:[:new,:create] def index @items = Item.all end def new @item = Item.new end def create Item.create(item_params) end private def item_params params.require(:item).permit(:title,:body) end def sign_in_user redirect_to new_session_url unless sign_in? end end |
ここでは:onlyというオプションを追加している。
:onlyは指定されたエンドポイントでのみbefore_actionを実行するためのオプション。
新規作成画面と、新規投稿処理を司る[:new,:create]のみを対象としている。
それから実際に呼び出されるメソッドを定義している。
Helperメソッドのsign_in?を呼び出しfalseであればnew_session_urlにリダイレクトする、というものだ。
このnew_session_urlは/sessions/newを指している。
Helperは任意のView内で呼び出すことができるが、Controllerの場合は明示的にincludeしないと使えない。
なので、ApplicationControllerかItemsController内でinclude SessionsHelperを追加する必要がある。
336px
336px
関連記事
- PREV
- 意識低いRuby on Rails再入門5
- NEXT
- RDSの特定のデータベースをダンプする