J'ai également travaillé sur la solution d'Elton Santos et j'ai décidé que la chapelure devrait être automatique comme dans l'histoire. Donc, j'ai modifié du code:
Dans mon application.html.erb
<%= render_navigation %>
Dans mon point de vue, j'utilisais déjà:
<% content_for :heading do 'User Detail' end %>
Alors, mon navigation_helper.rb ressembler à:
module NavigationHelper
def navigation_add(title, url)
nav_list = session['navigation'].present? ? session['navigation'] : []
nav_list << { 'title' => title, 'url' => url }
# 1. Take last 3 items only (-1 is last, not -0)
nav_list = nav_list[-3..-1] if nav_list.length > 3
# 2. Now, if first is pointing root, remove it
nav_list.shift if nav_list[0]['url'] == '/'
# 3. If last one is same as its predecessor, remove it
nav_list.pop if nav_list.length > 1 && (nav_list[-1]['url'] == nav_list[-2]['url'])
session['navigation'] = nav_list
end
def render_navigation
render partial: 'shared/navigation', locals: { nav_list: session['navigation'] }
end
end
et enfin, _navigation.html.erb:
<ol class="breadcrumb">
<li><%= link_to '/' do %>
<i class="fa fa-home"></i> Home <% end %>
</li>
<i class="fa fa-angle-double-right" style="color: #ccc; padding: 0 5px;"></i>
<% nav_list.each_with_index do |nav, i| %>
<% if i != nav_list.length-1 %>
<li><%= link_to nav['title'], nav['url'] %></li>
<% else %>
<li class="active"><%= nav['title'] %></li>
<% end %>
<% end %>
</ol>
Donc, ce qui se passe ici est; J'enregistre chaque titre de page dans la session et construis des chapelures à partir de cela. Je garde les trois entrées récentes seulement avec les entrées codées en dur pour Home et supprimer les entrées en double lorsqu'elles ne sont pas séparées.
J'espère que cela aide: http://stackoverflow.com/questions/4289272/how-do--create-a-dynamically-generated-breadcrumb-in-rails-3 – akz92