I'm slightly insecure about my breadcrumb solution. Names and links are defined in each controller action:
<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 %>
This way I can use:
@l1_link = user_path()
Question: As I am not that smart - could this kind of system lead to desaster somewhere down the road? Is this (grossly) inefficient?
Breadcrumbs menu are a recurrent pattern in most Rails applications. To solve this issue, I created and released a plugin called breadcrumbs_on_rails.
You define your breadcrumbs in the controller
class MyController
add_breadcrumb "home", root_path
add_breadcrumb "my", my_path
def index
# ...
add_breadcrumb "index", index_path
end
end
and you render them in your view.
<!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>
Even if you don't want to use a plugin, I encourage you to give it a look. It's open source and you can grab some idea for your app.
I made a gem named Gretel that is a Ruby on Rails plugin for creating breadcrumbs. The breadcrumbs are configured in a separate configuration file and selected in the view.
Example 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
In your view:
<% breadcrumb :issue, @issue %>
In your app/views/layouts/application.html.erb:
<%= breadcrumbs pretext: "You are here: " %>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With