12
votes

Rails / Rubis "et retour False" Syntaxe

J'ai vu ce code dans un tutoriel des rails que je fais

def access_denied
  redirect_to login_path, :notice => "Please log in to continue" and return false
end


1 commentaires

Oh, je pensais que tu demandais pourquoi il serait utilisé. Dans tous les cas, s'il est utilisé par un filtre tel que décrit dans ma réponse, soyez très méfiant.


4 Réponses :


23
votes

Les et sont là seulement pour que vous puissiez écrire le défi Faux de la même ligne que l'énoncé précédent.

C'est équivalent à faire cela: xxx

Ce n'est pas exactement la même chose car avec le "et" il ne renverrait que false si la méthode redirect_to renvoie quelque chose qui n'est pas nil ou faux mais comme il retourne presque toujours quelque chose qui n'est pas nil ni faux le côté droit de la déclaration est toujours exécuté (et faux est retourné).

Le et dans RUBY est juste un alias à && et se comporte exactement Comme avec une seule différence, il a une priorité inférieure à celle de toutes les autres pièces de la déclaration, il est donc d'abord évalué tout ce qui est à gauche puis est appliqué. Ruby a également le ou qui est identique à celui || mais avec une priorité inférieure dans les expressions.


1 commentaires

Si vous voulez jamais ajouter un retour qui s'exécute toujours, mais vous N'EST P'EST CONSULIER que la première expression reviendra toujours non fausse, vous pouvez également utiliser un point-virgule au lieu de et , comme ceci: argument do_something, argument; retourner faux



2
votes

Ce type de construction utilisé pour être utilisé avec un filtre lorsque des valeurs de retour de filtre étaient attendues. Le false arrêterait le traitement normal de la demande.

Donc, si un contrôleur ressemblait à ceci: xxx

Aucune des actions du contrôleur ne fonctionnerait; Cette méthode était probablement conçue pour être appelée de un filtre, comme: xxx

ces jours de retour de filtre Les valeurs de retour sont ignorées.

Il pourrait être utilisé comme méthode normale dans une action pour arrêter de traiter l'action et le retour après la redirection, donc aucune autre logique / rendu / etc. est exécuté à l'intérieur du contrôleur.


0 commentaires

3
votes

redirect_to login_path ,: Avis => "Veuillez vous connecter pour continuer" est une expression normale dans RUBY qui ne renvoie pas faux (ou nil, voir le code source ), donc l'exécution du programme continue (pour vérifier la deuxième partie après et ) et retour false peut être exécuté.


0 commentaires

1
votes

Documentation sur les opérateurs: sous le "défini? et, ou, et, et, et et, et et non "Section

Utiliser et code> est utile pour chaînonner des opérations liées ensemble jusqu'à ce que l'une d'entre elles renvoie nil code> ou false code>. Vous pouvez l'utiliser comme vous l'avez montré dans votre question ou vous pouvez également l'utiliser sur le court-circuit la ligne de code. P> xxx pré>

Le blog obtient uniquement .publish! code> appelé dessus si le recherche_by_id code> a été réussi. p>

dans votre exemple: p> xxx pré>

Ils utilisent simplement Il doit écrire le code plus compact de manière compacte sur une ligne. p>

Cependant, il est également utile pour une action du contrôleur où vous risquez peut-être sur la base de conditionnels et que vous ne voulez pas obtenir de rails "Plusieurs rendoirs" : P>

if something
  render :partial => 'some_partial' and return
end


0 commentaires