2016-12-05 1 views
0

J'utilise Octokit pour me connecter.redirect_to ne fonctionne pas dans le bloc de secours

helper_method :user 

def show 
end 

def user 
    client = Octokit::Client.new(access_token: session[:access_token]) 
    begin 
    @user = client.user 
    rescue => e 
    redirect_to root_path 
    return 
    end 
end 

Le root_path est dans la configuration

root to: 'home#new' 

Les secours es exécutés, mais le redirect_to ne fonctionne pas, il retourne à la même vue que la principale méthode. Note: J'ai lu dans beaucoup de post que mettre return le corrige, néanmoins il ne l'a pas fait

+0

Supprimez le ':' de root_path et assurez-vous que root_path est défini dans votre fichier config/routes.rb. De même, "return false" pour stopper l'exécution. – bkunzi01

+0

@ bkunzi01 J'ai mal orthographié. J'ai mis à jour le post. La racine est définie et le root_path est défini correctement –

Répondre

1

Votre code appelle la méthode redirect_to, mais le bloc de secours retourne par la suite nil. Au lieu de cela, combiner la redirection et retour en une seule déclaration:

client = Octokit::Client.new(access_token: session[:access_token]) 
begin 
    @user = client.user 
rescue => e 
    redirect_to root_path and return 
end 

En fait, vous n'avez pas besoin du retour du tout, à moins qu'il ya quelque chose après cette déclaration dans la méthode. C'est parce que dans Ruby la dernière déclaration est implicitement retournée.

+0

J'ai essayé et cela n'a pas fonctionné. Le problème est que le code est dans une méthode d'assistance et non dans le contrôleur de méthode? –

+0

J'ai mis à jour le post afin de clarifier que @mysmallidea –

+0

Octokit soulève-t-il vraiment une exception s'il n'y a pas d'utilisateur? – mysmallidea