7
votes

Un contrôleur, des vues différentes pour les utilisateurs normaux et les administrateurs

Dans ma demande, j'ai un modèle "utilisateur". Chaque utilisateur peut avoir plusieurs adresses (e-mail) définies dans l'adresse "adresse": xxx

à l'intérieur de la classe AdjointController, l'utilisateur actuellement connecté est disponible dans la variable d'instance "@user". . Le contrôleur empêche les utilisateurs ordinaires d'éditer, de supprimer, de visualiser, etc. Les adresses qui ne leur appartiennent pas - mais il autorise un utilisateur administratif à modifier ceux-ci. La classe AddressController peut demander à l'adresseModel si l'utilisateur actuellement connecté est effectué des opérations normales ou superutilisatrices.

Tout cela fonctionne bien et que les mises à jour de la base de données sont faites comme prévu, cependant, j'aimerais vraiment avoir différents HTML. Vues en fonction du mode de fonctionnement. Je ne peux que penser à deux façons de réaliser que:

  1. Faites le mode de fonctionnement (normal / privilégié) connu dans la classe AddressController (à l'aide d'une variable d'instance, par exemple @ privilégié) et utilisez une instruction "si" dans la vue.
  2. Utilisez quelque chose comme un "After_Filter" dans le contrôleur d'adresse pour rendre une disposition différente.

    S'il est possible d'afficher les résultats d'exécution d'un seul contrôleur en deux dispositions totalement différentes, selon le mode de fonctionnement, c'est un bon moyen de réaliser cela?

    Merci en avance Stefan


0 commentaires

5 Réponses :


4
votes

Vous pouvez simplement appeler le Méthode de rendu manuellement à la fin de votre action de contrôleur:

if @privileged
    render :action => 'show_privileged'
else
    render :action => 'show'
end


0 commentaires



2
votes

S'il s'agit du seul contrôleur de votre application où vous êtes si / alors que tout le monde est probablement bien. Si vous commencez à faire ce type de logique partout où vous devriez vous dire que vous faites trop à la fois.

La réponse que vous avez acceptée (qui va bien et fonctionne!) a une configuration différente et une vue différente, à moi indiquant que le contrôleur fait trop de choses - je le scinderais dans un contrôleur d'administrateur.


1 commentaires

Cette. Tu avais raison. J'ai essayé de faire trop de choses à la fois - l'idée d'avoir toutes ces actions disponibles sur deux modes de fonctionnement était trop intrigante. J'ai écrit un contrôleur d'administrateur dédié. Merci.



1
votes

Vous devez mettre des actions administratives dans un espace de noms administratifs et restreindre là-bas. Créez un répertoire appelé admin dans votre répertoire de contrôleurs et ajoutez un _Application_Controller.rb_ là-bas: xxx

Vous pouvez désormais mettre des contrôleurs dans cet espace de noms et les faire hériter de < Code> admin :: ApplicationController aussi.


0 commentaires