真剣に、どこから始めればよいかわかりません。gem を使用せずにヘルパー ブレッドクラムを実装するにはどうすればよいですか? 私はいくつかの宝石を試しましたが、私は単純なヘルペを作ることを好みます. 誰かまたはいくつかのチュートリアルが存在しますか? これは見つかりませんでした =/
ありがとう!
真剣に、どこから始めればよいかわかりません。gem を使用せずにヘルパー ブレッドクラムを実装するにはどうすればよいですか? 私はいくつかの宝石を試しましたが、私は単純なヘルペを作ることを好みます. 誰かまたはいくつかのチュートリアルが存在しますか? これは見つかりませんでした =/
ありがとう!
私の解決策:
navigation_helper.rb
module NavigationHelper
def ensure_navigation
@navigation ||= [ { :title => 'Home', :url => '/' } ]
end
def navigation_add(title, url)
ensure_navigation << { :title => title, :url => url }
end
def render_navigation
render :partial => 'navigation', :locals => { :nav => ensure_navigation }
end
end
_navigation.html.erb
<ol class="breadcrumb">
<% nav.each do |n| %>
<% unless n.equal? nav.last %>
<li><%= link_to n[:title], n[:url] %></li>
<% else %>
<li><%= n[:title] %></li>
<% end %>
<% end %>
</ol>
application.html.erb
<%= render_navigation %>
そして、任意のビュー:
<% content_for :title, 'My Page Title' %>
<% navigation_add @something.anything, '#' %>
私はさらにエルトン・サントスのソリューションに取り組み、ブレッドクラムは履歴のように自動化する必要があると判断しました。だから私はいくつかのコードを変更しました:
私のapplication.html.erbで
<%= render_navigation %>
私の見解では、私はすでに使用していました:
<% content_for :heading do 'User Detail' end %>
したがって、私の navigation_helper.rb は次のようになります。
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
最後に、_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>
それで、ここで起こっていることは次のとおりです。セッション中のすべてのページ タイトルを保存し、そこからブレッドクラムを作成します。最近の 3 つのエントリとホーム用のハードコードされたエントリのみを保持し、重複していない場合は重複エントリを削除します。