Imaginez avoir deux contrôleurs RESTful (UsersController, OffersController) et un PagesController (utilisé pour le contenu statique tel que index, about et ainsi de suite) dans votre application.Besoin d'un conseil: structure des vues Rails pour les sous-menus?
Vous avez les routes suivantes définies:
map.with_options :controller => 'pages' do |pages|
pages.root :action => 'index' # static home page
pages.about :action => 'about' # static about page
# maybe more static pages...
end
map.resources :users # RESTful UsersController
map.resources :posts # RESTful PostsController
Votre mise en page de l'application ressemble à ceci:
<html>
<head>
<title>Demo Application</title>
</head>
<body>
<ul id="menu">
<li>
<%= link_to 'Home', root_path %>
</li>
<li>
<%= link_to 'Offers', offers_path %>
<ul id="submenu>
<li><%= link_to 'Search', 'path/to/search' %></li>
<li>maybe more links...</li>
</ul>
</li>
<li>
<%= link_to 'About', about_path %>
</li>
<li>
<%= link_to 'Admin', users_path %>
<ul id="submenu">
<li><%= link_to 'New User', new_user_path %></li>
<li><%= link_to 'New Offer', new_offer_path %></li>
<li>maybe more links</li>
</ul>
</li>
</li>
<%= yield %>
</body>
</html>
Le problème avec la mise en page est que je ne veux qu'une seule #submenu
pour être visible à tout moment . Tous les autres sous-menus peuvent être complètement ignorés (ils n'ont pas besoin d'être rendus). Prenez le menu Admin par exemple: Ce menu doit être actif pour tous les chemins RESTful de l'application, sauf offers_path
. Actif signifie que le sous-menu est visible.
La seule solution à laquelle je peux penser pour y parvenir est de construire des conditions très compliquées si c'est compliqué (vraiment compliqué à écrire et à maintenir). Je suis à la recherche d'une solution élégante?
J'espère que quelqu'un comprend ma question - s'il y a quelque chose de flou, commentez simplement la question et je vais l'expliquer plus en détail.
Merci pour vos commentaires. Cependant, déplacer le problème à un assistant n'est pas une vraie solution. D'un autre côté, c'est en effet une amélioration et je ne m'attendais pas à trouver une solution élégante de toute façon de sitôt. Peut-être que quelqu'un d'autre a un meilleur tour ... –