Potrzebujesz porady: Struktura widoków Rails dla podmenu?

Wyobraź sobie, że masz w swojej aplikacji dwa kontrolery RESTful (UsersController, OffersController) i PagesController (używane do statycznej zawartości, takiej jak indeks, itd.).

Określono następujące trasy:

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

Układ aplikacji wygląda następująco:

<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>

Problem z układem polega na tym, że chcę tylko jednego#submenu być widocznym w każdej chwili. Wszystkie inne podmenu można całkowicie pominąć (nie trzeba ich renderować).

Weźmy na przykład menu administratora: To menu powinno być aktywne dla wszystkich ścieżek RESTful w aplikacji, z wyjątkiemoffers_path. Aktywny oznacza, że ​​podmenu jest widoczne.

Jedyne rozwiązanie, jakie mogę sobie wymarzyć, aby to osiągnąć, to zbudowanie bardzo skomplikowanego, jeśli warunki i to jest do bani (naprawdę skomplikowane w pisaniu i utrzymaniu). Szukam eleganckiego rozwiązania?

Mam nadzieję, że ktoś zrozumie moje pytanie - jeśli jest coś niejasnego, skomentuj to pytanie, a ja wyjaśnię to bardziej szczegółowo.

questionAnswers(2)

yourAnswerToTheQuestion