🙆

ConcernにSessionの処理を切り出してみた

2023/01/19に公開

RailsチュートリアルだとSessionまわりの処理はヘルパーに切り出されています。

module SessionsHelper

  def log_in(user)
    session[:user_id] = user.id
  end

  def current_user
    if session[:user_id]
      @current_user ||= User.find_by(id: session[:user_id])
    end
  end

  def logged_in?
    !current_user.nil?
  end

  def log_out
    reset_session
    @current_user = nil
  end

end

ヘルパーはviewで使う便利関数的なものだと思うので、セッションに書き込んだりするのはちょっと違うかなーと。Concernに切り出したらどうだろう??

module SessionsManager

  extend ActiveSupport::Concern

  included do
    helper_method :current_user
    helper_method :logged_in?
  end

  def log_in(user)
    session[:user_id] = user.id
  end

  def current_user
    if session[:user_id]
      @current_user ||= User.find_by(id: session[:user_id])
    end
  end

  def logged_in?
    !current_user.nil?
  end

  def log_out
    reset_session
    @current_user = nil
  end

end

これを、application_controller.rb で include すれば良し。
ActiveSupport::Concernをextendすると、includedでヘルパーにするメソッドを選択できるのが結構素敵だ。

Discussion