Hello, I'm still dtarting with ruby on rails. And I'm trying to have a menu depending on the current controller/method. Here is what I was thinking of (please tell me if there's a better way to do it): I have a database with menu_groups (corresponding to controllers) and menu_elements(corresponding to methods). Each menu_element belongs to one menu_group. I created a class Menu where I get all the menu_groups and menu_elements, and where I have the active controller and method. " class Menu attr_reader :menu_groups attr_reader :menu_group_active attr_reader :menu_elements attr_reader :menu_element_active def initialize current_url_elements=request_uri().split("/") @menu_groups << MenuGroup.find(:name,:order => "id") @menu_group_active = controller.controller_name @menu_elements << MenuElement.find(:all,:order => "menu_group_id id") @menu_elements_active = current_url_elements[-1] end end " Then, thanks to the attributes of this class I'll be able in my layout to make the difference between active and non active groups/elements. The problem here is that I don't know how to get the url into a variable... If my method is good, can you please tell me how to make it works? If not, can you show me the right way to do this?? Thanks a lot Best regards, Matthieu
on 2007-01-25 21:15
on 2007-01-25 21:18
I add something: I have one common layout for all my controllers.
on 2007-01-25 21:45
Unless I am missing something...Make layouts out of your menus then do something like this In your controllers or even your application.rb layout :select_layout then this method at the end of your controller private def select_layout ['action_name1', 'action_name2'].include?(action_name) ? "layout1" : "layout2" end Storing references to a menu in a DB seems wrong. Help that helps.
on 2007-01-25 22:08
Kim wrote: > Make layouts out of your menus Do you mean, I have to do one layout for every situation my menu will be in (=the number of method I'll have)?? It seems a lot to me and maybe I'm wrong but it would induce a lot of redundency, no? > > In your controllers or even your application.rb > layout :select_layout > > then this method at the end of your controller > private > def select_layout > ['action_name1', 'action_name2'].include?(action_name) ? "layout1" > : "layout2" > end > what does 'action_name' represent ?
on 2007-01-25 22:38
No - you make a layout for the menu - how many menus do you have? Your menu should retain a consistant look across most of your controllers/actions - unless I am not understanding something. I don't understand what you mean by "the situation my menu will be in (=the number of method I'll have)" If you mean, for example, that you want the "comments" menu item to be a different color when you are performing that action then use CSS and helper methods like link_to_unless_current amongst others. It seems like you might want to read some ofthe multiple of books this list preaches about. def select_layout > > ['action_name1', 'action_name2'].include?(action_name) ? "layout1" > > : "layout2" > > endwhat does 'action_name' represent ? action_name is the name of the action that should use layout1.