Как правильно использовать защитное предложение в Ruby

Как правильно использовать защитное предложение в этом примере?

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

Я не знаю, куда поместить флэш-сообщение при попытке переписать с помощью этих https://github.com/bbatsov/ruby-style-guide#no-nested-conditionals


person Sasha    schedule 11.08.2015    source источник


Ответы (1)


Здесь вы можете использовать оператор return. По сути, методу не нужно продолжать работу, если выполняются эти условия, поэтому вы можете выйти из него раньше.

def require_admin
  return if current_user&.role == 'admin'

  flash[:error] = 'You are not an admin'
  redirect_to root_path
end
person Justin    schedule 11.08.2015
comment
Это старее, но я все же подумал, что добавлю небольшое предложение к этому предложению возврата. Так как у нас есть оператор безопасной навигации в ruby, мы можем преобразовать это предложение защиты в return if current_user&.role == 'admin', что станет еще более кратким. - person boyd; 04.03.2020