Question

Les noms et les objets ont été simplifiées pour des raisons de clarté. Le concept de base reste le même.

J'ai trois contrôleurs: dog, cat et horse. Ces contrôleurs héritent tous du contrôleur animal. Dans le contrôleur animal, j'ai un filtre avant que authentifie un utilisateur en tant que tel:

before_filter :authenticate

def authenticate
  authenticate_or_request_with_http_basic do |name, password|
    name == "foo" && password == "bar"
  end
end

Dans l'action show de dog, je dois avoir un accès libre à tous les utilisateurs (ignorer l'authentification).

Si je devais écrire l'authentification séparément pour dog, je pouvais faire quelque chose comme ceci:

before_filter :authenticate, :except => :show

Mais depuis dog hérite de animal, je n'ai pas accès aux actions spécifiques au contrôleur. Ajout :except => :show dans le contrôleur de animal non seulement ignorer l'authentification pour l'action show de dog, mais aussi celle de cat et horse. Ce comportement est pas souhaité.

Comment puis-je ignorer l'authentification que pour l'action show de dog tout en héritant encore de animal?

Était-ce utile?

La solution

class Dog < Animal
  skip_before_filter :authenticate, :only => :show
end

Voir ActionController :: Filtres :: classmethods pour plus d'informations sur les filtres et l'héritage.

Autres conseils

Les deux réponses sont la moitié droite. Afin d'éviter de faire toutes vos actions de chien ouvert, vous devez qualifier le skip_before_filter d'appliquer seulement à l'action « show » comme suit:

class Dog < Animal
  skip_before_filter :authenticate, :only => :show
end

Pour cela, vous pouvez utiliser skip_before_filter

Il est expliqué dans le API Rails

Dans votre exemple serait dogjust doivent contenir

skip_before_filter :authenticate

Juste une petite mise à jour en utilisant des rails 4, il est skip_before_action :authenticate, :only => :show maintenant et que before_filters doit maintenant utiliser before_action à la place.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top