首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在rails 4中构建面包屑

如何在rails 4中构建面包屑
EN

Stack Overflow用户
提问于 2016-02-25 17:50:50
回答 3查看 2.4K关注 0票数 0

说真的,我不知道从哪里开始。如何在不使用gems的情况下实现辅助面包屑?我试过一些宝石,但我做了一个简单的头盔。是否存在某个人或某个教程?我没有找到这个=/

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-12 02:47:21

我的解决方案:

navigation_helper.rb

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
  <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

代码语言:javascript
运行
复制
<%= render_navigation %>

任何意见:

代码语言:javascript
运行
复制
<% content_for :title, 'My Page Title' %>
    <% navigation_add @something.anything, '#' %>
票数 2
EN

Stack Overflow用户

发布于 2016-02-25 22:32:36

你不能这么做。

在application_helper中:

代码语言:javascript
运行
复制
def breadcrumb(&block)
    content_tag :ol, { :class => "breadcrumb", :itemprop => "breadcrumb" } do
      block.call
    end
end

def breadcrumb_item(name = nil, url = nil, html_options = {}, &block)
    if name or block
      html_options[:class] = "#{html_options[:class]} active" unless url
      content_tag :li, html_options do
        if block
          block.call name, url
        else
          url ? link_to(name, url) : name
        end
      end
    end
  end

现在,在视图中粘贴以下内容:(我使用了index_path和@user.name) --您可以将此代码粘贴到“显示”视图中作为示例

代码语言:javascript
运行
复制
<%= breadcrumb do %>
  <%= breadcrumb_item "index", index_path %>
  <%= breadcrumb_item @user.name %>
<% end %>

现在,当您需要一些面包屑时,只需在上面调用这个截断,并更改路径和实例变量@your_variable。

票数 1
EN

Stack Overflow用户

发布于 2017-10-01 04:14:10

我进一步研究了Elton的解决方案,认为面包屑应该是自动的,就像历史一样。所以我修改了一些代码:

在我的application.html.erb里

代码语言:javascript
运行
复制
<%= render_navigation %>

在我看来,我已经在使用:

代码语言:javascript
运行
复制
<% content_for :heading do 'User Detail' end %>

所以,我的navigation_helper.rb看起来是:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
<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>

所以,这里要做的是:保存会话中的每个页面标题,并从中构建面包屑。我只保留最近的三个条目与硬编码的一个为家和删除重复的条目时,他们是不分开的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35634645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档