Ruby on Rails - rendu de mise en page
Je suis en train de diviser un site web en deux sections. Qui devrait utiliser la présentation de l'application et qui doit utiliser le layout admin. Dans mon application.rb, j'ai créé une fonction, comme suit:
def admin_layout
if current_user.is_able_to('siteadmin')
render :layout => 'admin'
else
render :layout => 'application'
end
end
Et dans les contrôleurs, où il pourrait être l'un ou l'autre j'ai mis
before_filter :admin_layout
Cela fonctionne très bien pour certaines pages (où son juste du texte) mais pour les autres, j'obtiens l'erreur classique:
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each
Quelqu'un a une idée de ce que je suis absent? Comment dois-je utiliser correctement le rendu et la mise en page?
Vous devez vous connecter pour publier un commentaire.
La méthode
render
sera effectivement tenter de rendre le contenu; vous ne devez pas appeler quand tout ce que vous voulez faire est de définir la mise en page.Rails a un modèle pour l'ensemble de cette cuites dans. Simplement passer un symbole de
layout
et la méthode de même nom sera appelé afin de déterminer la mise en page actuelle:Voir les détails ici.
peut-être vous avez besoin de vérifier que l'utilisateur est connecté en premier?
C'est peut-être parce
current_user
estnil
lorsque l'utilisateur n'est pas connecté. Test pour.nil?
ou d'initialiser l'objet.Essayer molf réponse à:
si logged_in? et current_user.is_able_to('siteadmin')
Votre utilisateur courant est properbly ensemble dans la après que l'utilisateur a ouvert une session. et dans ce cas, vous devez avoir une option pour déterminer si vous êtes connecté en
comme
Il sera seulement entrer dans l'instruction if si votre @current_user non nul.