ruby-on-railsrubyguardclause

How to correctly use guard clause in Ruby


What is the correct way to use the guard clause in this sample?

def require_admin
  unless current_user && current_user.role == 'admin'
    flash[:error] = "You are not an admin"
    redirect_to root_path
  end        
end

I don't know where to put flash message when trying to rewrite using these https://github.com/bbatsov/ruby-style-guide#no-nested-conditionals conventions


Solution

  • You can use the return statement here. Essentially, there is no need for the method to continue if those conditions are met, so you can bail out early.

    def require_admin
      return if current_user&.role == 'admin'
    
      flash[:error] = 'You are not an admin'
      redirect_to root_path
    end