How to correctly use guard clause in Ruby
Asked Answered
C

1

22

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

Caulk answered 11/8, 2015 at 13:27 Comment(0)
S
38

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
Semination answered 11/8, 2015 at 13:31 Comment(1)
This is older, but I still thought I'd add a small suggestion to that return clause. Since we have the safe navigation operator in ruby, we can refactor that guard clause to return if current_user&.role == 'admin' which is even more succinct.Regardful

© 2022 - 2024 — McMap. All rights reserved.