Dans ma demande, j'ai un modèle "utilisateur". Chaque utilisateur peut avoir plusieurs adresses (e-mail) définies dans l'adresse "adresse": à 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. P> 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: p> 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? P> Merci en avance
Stefan P> P>
5 Réponses :
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
Vous pouvez spécifier quelle vue utiliser pour afficher le résultat d'une action dans l'action elle-même. Vous pouvez également spécifier quelle disposition à utiliser aussi. Donc, par exemple: Ceci rendra soit admin_action.html.erb code> ou
non_admin_action.html.erb code> en fonction de la valeur renvoyée de
is_authorisé code>. L'option
: layout code> est, ER, facultatif et fait référence à une mise en page des vues / des mises en page. Il existe différentes autres options que vous pouvez trouver dans le Documentation pour le rendu a>. p> p>
Merci. Mais il semble que si je fais cela, je laisserais le chemin de "convention sur la configuration". Je suis un peu inquiet - c'est ma première demande de rails - devrais-je déjà diverger de ce que tout le monde semble faire?
De plus, la convention est sans doute pour rendre une vue pour une action, mais je peux voir ce que vous obtenez. Si vous recherchez simplement des mises en page différentes, la solution de Staelen est une bonne. Si vous voulez vraiment rendre des vues différentes en fonction de la logique dans l'action, je ne suis pas sûr que c'est assez proche de la convention de base pour vous éloigner de ne pas préciser la vue que vous souhaitez rendre.
Je pense que je vais essayer la solution de Staelen pour la mise en page et votre pour le gabarit pour être rendu. Merci encore.
Vous pouvez spécifier la disposition de la vue pour ce contrôleur particulier ou l'ensemble de l'application dans le contrôleur d'application par: Vous pouvez essayer de le comprendre ici: http://guides.rubyonRails.org/layouts_and_rending.html#Unter-Render.html#_and-Render , sous espère que cela aide =) p> p>
Oh, c'est une bonne idée. Merci beaucoup!
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. p>
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. P>
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.
Vous devez mettre des actions administratives dans un espace de noms administratifs et restreindre là-bas. Créez un répertoire appelé Vous pouvez désormais mettre des contrôleurs dans cet espace de noms et les faire hériter de < Code> admin :: ApplicationController code> aussi. p> p> admin code> dans votre répertoire de contrôleurs et ajoutez un _Application_Controller.rb_ là-bas: