はじめに
こんにちは、だいごです。
今回は、deviseを導入することで使えるようになるメソッドをまとめていきます。
よかったらご覧ください。
ヘルパーメソッド一覧
- before_action :authenticate_user!
- user_signed_in?
- current_user
- user_session
※モデル名がuserの場合を想定しています。
ここからは一つ一つを詳しく解説します。
before_action :authenticate_user!
ログイン状態によって表示するページを切り替えるdeviseのメソッド。
処理が呼ばれた段階で、ユーザーがログインしていなければ、そのユーザーをログイン画面に遷移させます。
class MessagesController < ApplicationController
before_action :authenticate_user!
def index
end
def new
end
end
上記のように記述した場合には、ログインしたユーザーのみメッセージ一覧と新規投稿に遷移することができます。
また、onlyオプションやexceptオプションを用いることで、特定のアクションのみに制限をかけることもできます。
class MessagesController < ApplicationController
before_action :authenticate_user!, only: :new
def index
end
def new
end
end
上記のように記載した場合には、メッセージ一覧には誰でも遷移することができ、
新規投稿にはログインしたユーザーのみ遷移することができます。
user_signed_in?
ユーザーがログインしているか否かを判断できるdeviseのメソッド。
コントローラー、ビューを問わずに使用することができます。
<%# 省略 %>
<body>
<header class="header">
<div class="header__bar row">
<h1 class="grid-6"><a href="/">MessageApp</a></h1>
<% if user_signed_in? %>
<div class="user_nav grid-6">
<%= link_to "ログアウト", destroy_user_session_path, method: :delete %>
<%= link_to "投稿する", new_message_path, class: "post" %>
</div>
<% else %>
<div class="grid-6">
<%= link_to "ログイン", new_user_session_path, class: "post" %>
<%= link_to "新規登録", new_user_registration_path, class: "post" %>
</div>
<% end %>
</div>
</header>
<%# 省略 %>
上記のように記載した場合には、ログイン状態によってビューを変えることができます。
current_user
ログインをしているユーザーの情報が取得できるdeviseのメソッド。
コントローラー、ビューを問わずに使用することができます。
class MessagesController < ApplicationController
# 省略
def create
Tweet.create(message_params)
end
# 中略
private
def message_params
params.require(:message).permit(:name, :image, :text).merge(user_id: current_user.id)
end
end
上記のように記載した場合には、メッセージと作成したユーザーを紐づけることができます。
user_session
ユーザーのセッション情報を設定・取得することができるdeviseのメソッド。
おわりに
今回はdeviseのヘルパーメソッドについてまとめました。
user_sessionに関しては使用したことがなかったため、今回は簡単な説明のみとなっています。
今後使用する機会があったら追記しようと思います。
ご指摘・コメントお待ちしてます。
ありがとうございました。
参考