2015-07-01 1 views
14

Существует следующий код:пункт Guard вместо оберточной код внутри условного выражения Rails

# API controller for authentication 
class Api::V1::SessionsController < Api::V1::ApplicationController 
    skip_before_action :authorize 

    def create 
    @user = User.find_by(email: params[:user][:email]) 
    unless @user && @user.authenticate(params[:user][:password]) 
     @error_message = 'Invalid username or password' 
     render 'shared/error', status: :unauthorized 
    end 
    end 
end 

Я использую Rubocop проверить мой код, если он соответствует рекомендациям Руби. Я получил следующее сообщение об ошибке:

Use a guard clause instead of wrapping the code inside a conditional expression. 
    unless @user && @user.authenticate(params[:user][:password]) 

Таким образом, я не понимаю, как я могу сделать этот код лучше, используя пункт охраны. Заранее спасибо!

ответ

20

После rubocops спецификации: http://www.rubydoc.info/github/bbatsov/rubocop/Rubocop/Cop/Style/GuardClause

Что-то вроде ...

return if @user && @user.authenticate(params[:user][:password]) 
@error_message = 'Invalid username or password' 
render 'shared/error', status: :unauthorized 
+0

Не хорошо. Если пользователь && user.authenticate, мне нужно визуализировать представление по умолчанию – malcoauri

+3

, что сделал osman выше, эквивалентен вашему коду. он будет по-прежнему отображать шаблон создания, когда пользователь будет успешно аутентифицироваться. – jvnill

Смежные вопросы