【Rails】current_userをmodelで使用する方法

【Rails】current_userをmodelで使用する方法

結論(実装の手順)

まず実装の手順をお伝えします。簡単にいうと以下のように実装します。

  1. user.rbにて、Thread.currentにcurrent_userをセットするクラスメソッドを用意する
  2. user.rbに用意したクラスメソッドをapplication_controller.rbにて使用して、Thread.currentにcurrent_userをセットする
  3. user.rbのクラスメソッドを使用して、current_userを呼びだす

※そもそもcurrent_userは具体的なものであり、基本的には抽象化されたモデルで呼び出すことはありません。本当に必要かどうか判断して、実装してください。

実装について

まずはuser.rbに、以下のメソッドを用意します。

user.rb


class User < ApplicationRecord
  def self.current_user=(user)
    Thread.current[:user] = user # 現在のスレッドにuserを設定するメソッド
  end

  def self.current_user
    Thread.current[:user] # 現在のスレッドに登録されているユーザーを呼び出す
  end
end

続いて、application_controller.rbに以下の記述を行います。

application_controller.rb

class ApplicationController < ActionController::Base
  before_action :set_current_user # beforeアクションで、userを毎回セットできるようにする

  def set_current_user
    User.current_user = current_user # 先程定義したクラスメソッドを呼び出して、そちらに現在のcurrent_userを代入
  end
end

最後に、modelで呼び出すときは、以下のように呼び出します。

コード

User.current_user # これでcurrent_userを呼び出すことができる

以上です。

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA