🙆
ConcernにSessionの処理を切り出してみた
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