0
0

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 1 year has passed since last update.

【備忘録・Rails】devise導入で使えるメソッド

Posted at

はじめに

こんにちは、だいごです。
今回は、deviseを導入することで使えるようになるメソッドをまとめていきます。
よかったらご覧ください。

ヘルパーメソッド一覧

  • before_action :authenticate_user!
  • user_signed_in?
  • current_user
  • user_session

※モデル名がuserの場合を想定しています。 

ここからは一つ一つを詳しく解説します。

before_action :authenticate_user!

ログイン状態によって表示するページを切り替えるdeviseのメソッド。
処理が呼ばれた段階で、ユーザーがログインしていなければ、そのユーザーをログイン画面に遷移させます。

messages_controller.rb
class MessagesController < ApplicationController
  before_action :authenticate_user!

  def index
  end

  def new
  end
end

上記のように記述した場合には、ログインしたユーザーのみメッセージ一覧と新規投稿に遷移することができます。
また、onlyオプションやexceptオプションを用いることで、特定のアクションのみに制限をかけることもできます。

messages_controller.rb
class MessagesController < ApplicationController
  before_action :authenticate_user!, only: :new

  def index
  end

  def new
  end
end

上記のように記載した場合には、メッセージ一覧には誰でも遷移することができ、
新規投稿にはログインしたユーザーのみ遷移することができます。

user_signed_in?

ユーザーがログインしているか否かを判断できるdeviseのメソッド。
コントローラー、ビューを問わずに使用することができます。

application.html.erb
<%# 省略 %>

  <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のメソッド。
コントローラー、ビューを問わずに使用することができます。

messages_controller.rb
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に関しては使用したことがなかったため、今回は簡単な説明のみとなっています。
今後使用する機会があったら追記しようと思います。
ご指摘・コメントお待ちしてます。
ありがとうございました。

参考

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?