ruby-on-rails - que - ruby on rails tutorial
¿Necesitas consejo: vistas de estructura de rieles para submenús? (2)
Normalmente, resumiría la funcionalidad de menú para que tenga un método de ayuda para representar el menú Admin. De esta forma, es posible lanzar tanta lógica en el asistente como lo desee sin nublar su lógica de visualización.
Entonces, tu ayudante se vería como (perdona el pseudo-código de ruby / rails, han pasado un mes o dos desde que lo toqué):
def render_admin_menu()
if !current_path.contains(''offer'')
render :partial => ''shared/admin_menu''
end
end
Imagine tener dos controladores RESTful (UsersController, OffersController) y un PagesController (utilizado para contenido estático como índice, etc.) en su aplicación.
Tienes las siguientes rutas definidas:
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
El diseño de tu aplicación se ve así:
<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>
El problema con el diseño es que quiero que solo un #submenu
sea visible en cualquier momento. Todos los demás submenús se pueden omitir por completo (no es necesario representarlos en absoluto).
Tome el menú Admin por ejemplo: este menú debe estar activo para todas las rutas RESTful en la aplicación a excepción de offers_path
. Activo significa que el submenú está visible.
La única solución que puedo pensar para lograr esto es construir mucho más complicado si las condiciones y eso es una mierda (realmente complicado de escribir y mantener). Estoy buscando una solución elegante?
Espero que alguien entienda mi pregunta. Si hay algo poco claro, solo comenta la pregunta y voy a explicarlo con más detalle.
Una cosa con la que podrías jugar es yield y content_for, que se usa con algunos parciales para los menús. Por ejemplo, puede poner cada sección del menú en un parcial y luego modificar su diseño a algo como:
<%= yield(:menu) %>
A continuación, puede especificar en sus vistas content_for y poner los parciales que desee en el menú. Si no está especificado, no se procesará.
<% content_for(:menu) do %>
<%= render :partial => ''layouts/menu'' %>
<%= render :partial => ''layouts/search_menu'' %>
etc...
<% end %>
Si está utilizando muchos de los mismos menús en la mayoría de las páginas, especifique un valor predeterminado en su diseño si no se encuentra el rendimiento (: menú).
<%= yield(:menu) || render :partial => ''layouts/menu_default'' %>
Le ahorra un montón de tipeo. :) He encontrado que esta es una manera muy limpia de manejar las cosas.