【Rails】current_userをmodelで使用する方法
結論(実装の手順)
まず実装の手順をお伝えします。簡単にいうと以下のように実装します。
- user.rbにて、Thread.currentにcurrent_userをセットするクラスメソッドを用意する
- user.rbに用意したクラスメソッドをapplication_controller.rbにて使用して、Thread.currentにcurrent_userをセットする
- 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を呼び出すことができる
以上です。