2009-11-23 9 views
1

J'ai un peu de mal à créer un menu dans Rails. Dans ApplicationController J'ai une méthode de set_menu:Variable de partage entre le contrôleur et l'assistant dans Rails

def self.set_menu(menu, options = {}) 
    # ... 
end 

Ceci est appelé de chaque contrôleur comme ceci:

class UsersController < ApplicationController 
    set_menu :users 

    # ... 
end 

En set_menu, je dois créer une variable que je peux plus tard atteindre dans une méthode d'aide à découvrez lequel des éléments de menu est celui actif. J'ai travaillé en utilisant une variable de classe. Cela a fonctionné très bien dans le développement, mais il s'avère que Rails met en cache cette variable en production, donc le menu actif n'a jamais changé. Alors, comment puis-je dans set_menu créer une variable que je peux atteindre à partir d'une méthode d'assistance et cette étape de production ne cache pas?

Répondre

4

Les variables d'instance sont partagées entre le contrôleur et la vue, y compris les aides.

class ApplicationController 

    def self.set_menu(menu, options = {}) 
    before_filter(options) do |controller| 
     controller.send(:set_menu, menu) 
    end 
    end 

    # ... 


    protected 

    def set_menu(menu) 
     @menu = menu 
    end 

end 

# in your view 
<%= @menu %> 

Si vous voulez créer le menu de navigation plus complexe, un coup d'oeil à mon Tabs On Rails Gem.

+0

Merci beaucoup! C'était une très bonne solution pour ce problème. – rejeep

Questions connexes