2010-10-21 15 views
2

Comment accéder dans une ActionView à une variable définie dans ApplicationController?Rails: accès aux variables: de ApplicationController à ActionView

Dans mon cas, j'aimerais que ma mise en page réponde à une variable qui a été configurée dans ApplicationController.

S'il s'agissait d'une vue, associée à l'action d'un contrôleur, je n'aurais qu'à configurer une instance var dans l'action correspondante et tout serait OK. Mais l'accès à ces données dans la mise en page est quelque chose de nouveau pour moi.

Merci!

+0

Je crois que la définition d'une variable d'instance fonctionnera toujours. –

Répondre

2

Vous pouvez créer une méthode dans ApplicationController et appeler cette méthode dans vos présentations. C'est ainsi que restful_authentication (et de nombreux autres plugins auth) crée et gère current_user. Ainsi, dans ApplicationController:

def current_user 
    @current_user ||= User.find_by_id(session[:user_id]) 
end 

Et dans votre mise en page:

<% if current_user %> 
    <%= link_to 'logout', logout_path %> 
<% else %> 
    <%= link_to 'login', new_user_session_path %> 
    <%= link_to 'register', new_user_path %> 
<% end %> 

Ceci est juste un exemple artificiel, mais vous pouvez voir comment cela fonctionne. Ce n'est pas strictement une variable, c'est une méthode qui met en cache la valeur de la première fois qu'elle est appelée et la renvoie.

+1

Je crois que si vous souhaitez utiliser les méthodes de contrôleur dans une vue, vous devez 'helper_method: current_user'. –

+0

Merci à vous deux! Merci à Jaime pour le bel exemple, et merci à Jamie pour avoir suggéré des aides - j'avais vraiment besoin d'un assistant pour que ça marche! Tout va parfaitement bien maintenant! Génial! –