0

真剣に、どこから始めればよいかわかりません。gem を使用せずにヘルパー ブレッドクラムを実装するにはどうすればよいですか? 私はいくつかの宝石を試しましたが、私は単純なヘルペを作ることを好みます. 誰かまたはいくつかのチュートリアルが存在しますか? これは見つかりませんでした =/

ありがとう!

4

3 に答える 3

2

私の解決策:

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, '#' %>
于 2016-03-12T02:47:21.680 に答える
1

私はさらにエルトン・サントスのソリューションに取り組み、ブレッドクラムは履歴のように自動化する必要があると判断しました。だから私はいくつかのコードを変更しました:

私の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 つのエントリとホーム用のハードコードされたエントリのみを保持し、重複していない場合は重複エントリを削除します。

于 2017-10-01T04:14:10.517 に答える