2015-07-01 4 views
14

C'è il seguente codice:Guardia clausola invece di avvolgere il codice all'interno di un'espressione condizionale Rotaie

# 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 

Io uso Rubocop per controllare il mio codice se corrisponde alle linee guida Ruby. Ho ricevuto il seguente errore:

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

Quindi, non capisco come posso rendere questo codice migliore utilizzando la clausola di guardia. Grazie in anticipo!

risposta

20

Seguendo rubocops spec: http://www.rubydoc.info/github/bbatsov/rubocop/Rubocop/Cop/Style/GuardClause

Qualcosa di simile ...

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

Non va bene. Se user && user.authenticate ho bisogno di renderizzare la vista di default – malcoauri

+3

ciò che osman ha fatto è equivalente al tuo codice. renderà ancora il modello di creazione quando l'utente si autentica correttamente. – jvnill

Problemi correlati