6
votes

Les rails n'utilisent pas la condition avec avant_filter

J'utilise avant_filter dans mon application. J'ai une méthode enregistrée_in? Code> qui retourne true si l'utilisateur est connecté. xxx pré>

maintenant dans mon contrôleur d'utilisateurs, je veux une action pour n'exécuter que si un utilisateur est Non connecté. Pour cela, je veux utiliser la condition non forte> avec enregistré_in? code> méthode dans avant_filter code> comme: p>

before_filter :!(logged_in?)


0 commentaires

3 Réponses :


8
votes

vous pouvez passer un bloc à avant_filter : xxx

mais cela ne ferait rien, car la valeur de retour du filtre avant le filtre ne va pas partout. Si vous souhaitez exécuter une action si un utilisateur n'est pas connecté, vous devez mettre cette action dans l'avant_filter.

Par exemple, si l'action était de rediriger vers la page de connexion, chemin, vous pourrait faire ceci: xxx

c'est réellement suffisamment long pour justifier une méthode de son propre: xxx


0 commentaires

18
votes

Alors que la réponse acceptée semble fonctionner, je l'aurais fait différemment.

before_filter :login_required, unless: :logged_in?

def login_required
  redirect_to login_path, notice: 'Please login'
end


2 commentaires

Si vous utilisez la méthode: login_required comme dans la réponse au-dessus de la vôtre, je ne sais pas pourquoi vous vous souciez de vous déranger avec le Sauf Logged_in? sur votre avant filtre. Il a exactement le même à moins que la clause dans les deux endroits (avant filtre et dans la méthode appelle), vous vous répétez donc vous-même. Si vous tirez sur le filtre avant, cela n'aura même jamais accès à la méthode. Il ne fait pas de différence fonctionnelle, mais stylistiquement, ce n'est pas comme Dry et ajoute du code répété inutile.


Bon point, mis à jour ma réponse à inclure une méthode mise à jour login_requiked .



0
votes

applicatif_controller.rb xxx


0 commentaires