Rails如何为每个元素构建带有不同URL的面包屑?

时间:2019-01-09 15:01:12

标签: ruby-on-rails ruby-on-rails-4

我的控制器包含:

@prefix = params[:asset_id]

其中 params [:asset_id] 包含子目录名称,例如[下载,公司,手册]。

我的视图包含:

<ol class="breadcrumb">
  <li><%= link_to 'Start', admin_assets_path %></li>
  <% for item in @prefix.split("/") %>
    <li>&nbsp<%= link_to "/ #{item}", "" %></li>
  <% end %>
</ol>

结果如下:

开始/下载/公司/小册子

我这里的问题当然是所有面包屑都将链接到相同的以下URL:

http://localhost:3000/int/en/admin/assets/downloads%2Fcompany%2Fbrochure%2F/path

我希望将它们全部链接到各自的URL,例如:

下载http://localhost:3000/int/en/admin/assets/downloads%2F/path

公司http://localhost:3000/int/en/admin/assets/downloads%2Fcompany%2F/path

手册http://../en/admin/assets/downloads%2Fcompany%2Fbrochure%2F/path

如何使每个面包屑都有自己的网址?

1 个答案:

答案 0 :(得分:2)

首先,让我注意到,您需要确定每个特定面包屑项目的链接逻辑。

据我从您的示例可以看出,您正在使用以下约定来确定某个面包屑的链接目标:

面包屑的链接目标包括:

  • 静态路径前缀(在您的情况下为http://localhost:3000/int/en/admin/assets/
  • 所有较高或相同级别的面包屑的串联,并由/连接。如果为item = 'company',则为downloads/company
  • 和静态后缀/path

为了创建这些链接,您可以使用以下代码:

<ol class="breadcrumb">
  <li><%= link_to 'Start', admin_assets_path %></li>
  <%
    items = @prefix.split("/")
    prefix = admin_assets_path
    suffix = '/path'
  %>
  <% items.each.with_index do |item, i| %>
    <%
      middle = items[0..i].join('/')
      path = prefix + middle + suffix
    %>
    <li>&nbsp<%= link_to "/ #{item}", path %></li>
  <% end %>
</ol>

但是您的实际问题是:

  

如何使每个面包屑都有自己的网址?

您当前的约定(面包屑形式的链接)有一些局限性,例如国际化困难,我们无法支持逻辑面包屑结构不反映url结构的情况。

您可以使用诸如哈希图或树形结构之类的东西来建模实际的站点结构,或者查看为此目的制作的宝石,例如breadcrumbs_on_rails