Develop: override current_user (set the Class class for itself)

I want to do this:

application_controller.rb:

class ApplicationController < ActionController::Base
  alias_method :devise_current_user, :current_user

  private

  def current_user
    if params[:user].blank?
      puts "!found user"
      devise_current_user
    else
      puts "found user"
      user = User.find_by(email: params[:user][:email])
      return detect_role(user)
    end
  end

  def detect_role(user)
    roles = user.roles_name
    user = if roles.include?("mentor")
             user.becomes(Mentor)
           elsif !roles.include?("admin") && !roles.include?("mentor")
             user.becomes(Student)
           else
             user
           end
  end
end

but still does not go beyond current_user

Journal: https://gist.github.com/anonymous/e0a5fb593b020b16a0cd2ae9d539b92a

+4
source share
2 answers

It helps me:

class ApplicationController < ActionController::Base
  alias_method :devise_current_user, :current_user

  private

  def current_user
    user = if params[:user].blank?
             devise_current_user
           else
             User.find_by(email: params[:user][:email])
           end
    detect_role(user) if !user.blank?
  end

  def detect_role(user)
    roles = user.roles_name
    user = if roles.include?("mentor")
             user.becomes(Mentor)
           elsif !roles.include?("admin") && !roles.include?("mentor")
             user.becomes(Student)
           else
             user
           end
  end
end
+2
source

Use

super

and then the correct override code, for example:

def current_user
  super
  ----your code goes here ---
end
0
source

Source: https://habr.com/ru/post/1685939/


All Articles