helperメソッドについて

helperメソッドの使用方法について

app/helpers/sessions_helper.rb

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

  def logged_in?
    !!current_user
  end
end

 

ApplicationControllerにメソッドを定義して、helperとして使用したいものについてはhelper_methodsというメソッドでcontrollerのメソッドをhelperとして使用するという方法が一般的であるようです。helperはViewのみで使用する目的で実装し、Controllerにincludeする書き方ですと使用しないメソッドまでincludeされてしまうのが問題となっています。

 

application.controlelr.rb

 

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  
  add_flash_types :success:danger
  before_action :authenticate_user
  helper_method :current_user:logged_in?★

  private
    def authenticate_user
      redirect_to login_url unless logged_in?
    end
    
    def log_in(user)
      session[:user_id= user.id
    end

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

    def logged_in?
      current_user.present?
    end

    def log_out
      session.delete(:user_id)
      @current_user = nil
    end
  end

 

log_inメソッドやlog_outメソッドをviewで使用しないため、下記には追加しません。

 

helper_method :current_user, :logged_in? 

 

参考記事

https://ushinji.hatenablog.com/entry/2018/01/01/214125