How to correctly use guard clause in Ruby

Sasha picture Sasha · Aug 11, 2015 · Viewed 14.5k times · Source

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

Answer

Justin picture Justin · Aug 11, 2015

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