0
1

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

deviseの超便利ヘルパーまとめ ❏Rails❏

Last updated at Posted at 2019-11-25

#deviseのヘルパーメソッド

メソッド 機能
current_user 現在ログインしているユーザーのインスタンス
user_signed_in? ユーザーがログインしているか
before_action :authenticate_user! ログインしていない場合はログイン画面に遷移させる
after_sign_out_path_for ログアウト後のリダイレクト先を指定

#【current_user】
現在ログイン中のユーザーのレコードをインスタンスとして取得できるメソッドです。
モデル間でアソシエーションを組んでいる場合、子要素・親要素の取得も可能です。

current_user.name
#ユーザーの名前

current_user.tweets
#ユーザーが保持するツイートすべて

#【user_signed_in?】
ログインしている場合true
ログインしていない場合false
を返します。

<% if user_signed_in? %>
  <div>
    <%= link_to "ログアウト", destroy_user_session_path, method: :delete %>
  </div>
<% else %>
  <div>
    <%= link_to "ログイン", new_user_session_path %>
    <%= link_to "新規登録", new_user_registration_path %>
  </div>
<% end %>

ログインしていたらログアウトボタンを、
ログインしていなかったらログインボタンと新規登録ボタンを表示させています。

#【before_action :authenticate_user!】
コントローラーの最初に記載することで、ログインユーザーのみに処理を実行させることができます。

tweets.controller.rb
class TweetsController < ApplicationController
  before_action :authenticate_user!, except: [:index]

  def index
  end

  def new
  end
end

except(除く)・only(のみ)オプションがあります。

上の例だと以下2つは同じ意味です。
except: [:index]
only: [:new]

非ログインユーザーがnewアクションを実行した場合、ログイン画面に遷移します。

#【after_sign_out_path_for】
ログアウトした後にどの画面に遷移するかを指定できます。
URLでもprefixでも構いません。

application_controller
def after_sitn_out_path_for(resource)
  '/users/sign_in'
end

def after_sitn_out_path_for(resource)
  new_user_session_path
end

deviseログイン機能の実装方法はこちらへ >https://qiita.com/ITmanbow/items/50b8dd216d442dae21ea
ではまた!
0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?