ruby-on-rails ruby controller breadcrumbs

ruby on rails - Pan rallado en Ruby sobre rieles



ruby-on-rails controller (7)

Estoy un poco inseguro acerca de mi solución de migas de pan. Los nombres y enlaces se definen en cada acción del controlador:

<a href="http://localhost:3000/">Home</a> <% if defined? @l1_link %> > <a href="<%= @l1_link%>"><%= @l1_name %></a> <% if defined? @l2_link %> > <a href="<%= @l2_link%>"><%= @l2_name %></a> <% end %> <% end %>

De esta manera puedo usar:

@l1_link = user_path()

Pregunta: Como no soy tan inteligente, ¿podría este tipo de sistema conducir a un desastre en algún lugar del camino? ¿Es esto (groseramente) ineficiente?



El menú Breadcrumbs es un patrón recurrente en la mayoría de las aplicaciones de Rails. Para resolver este problema, creé y lancé un plugin llamado breadcrumbs_on_rails .

Definís tus migas de pan en el controlador.

class MyController add_breadcrumb "home", root_path add_breadcrumb "my", my_path def index # ... add_breadcrumb "index", index_path end end

y los representas en tu vista.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>untitled</title> </head> <body> <%= render_breadcrumbs %> </body> </html>

Incluso si no quieres utilizar un complemento, te animo a que lo veas. Es de código abierto y puedes tener alguna idea para tu aplicación.


Esto es principalmente una cuestión de opinión, pero de todos modos:

  1. No querría tanta lógica en una vista. Probablemente todos lo hemos hecho, pero se ensucia rápidamente.
  2. El código no es seguro contra cambios futuros que afectan la profundidad del árbol.
  3. En lugar de las variables vinculadas *_name y *_link , sugeriría usar objetos adecuados de todos modos, con alguna funcionalidad link_to .

Es posible que encuentre el Episodio 162 de Railscasts de interés para una buena solución que le permita

<% for page in @page.ancestors.reverse %> <%= link_to h(page.name), page %> &gt; <% end %>


Hice un tenedor de gema crumble . Tiene muy pocas opciones de configuración y parece abandonado, pero cuando intenté cambiar a breadcrumbs_on_rails o gretel , me di cuenta de que tenía que agregar muchas líneas a mis vistas o controladores (y tengo muchos), pero con problemas. Se almacena todo en un archivo de configuración. Si te gusta hacer algunos parches y prefieres la configuración en un solo lugar, creo que es la mejor solución.


Hice una gema llamada Gretel que es un complemento de Ruby on Rails para crear migas de pan. Las rutas de navegación se configuran en un archivo de configuración independiente y se seleccionan en la vista.

Ejemplo config/breadcrumbs.rb :

crumb :root do link "Home", root_path end crumb :projects do link "Projects", projects_path end crumb :project do |project| link project.name, project_path(project) parent :projects end crumb :project_issues do |project| link "Issues", project_issues_path(project) parent :project, project end crumb :issue do |issue| link issue.name, issue_path(issue) parent :project_issues, issue.project end

En su opinión:

<% breadcrumb :issue, @issue %>

En su aplicación / views / layouts / application.html.erb:

<%= breadcrumbs pretext: "You are here: " %>



También puedes usar Ariane http://github.com/simonc/ariane

Con él puedes generar cualquier tipo de ruta de navegación, como enlaces en un párrafo o como un ul / li :)

Si quieres algo específico, puedes crear tu propio renderizador.

Es bastante simple de usar, solo agrega esto en un before_filter :

ariane.add ''Home'', root_path # in the app controller to have it everywhere ariane.add ''Some Page'', some_path