Rails 如何为每个元素构建具有不同 url 的面包屑导航?
Rails How can I build a breadcrumb with different urls for each element?
我的控制器包含:
@prefix = params[:asset_id]
其中 params[:asset_id] 包含子目录名称,如 [下载、公司、宣传册]。
我的观点包含:
<ol class="breadcrumb">
<li><%= link_to 'Start', admin_assets_path %></li>
<% for item in @prefix.split("/") %>
<li> <%= 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
让每个面包屑都有自己的逻辑应该如何 url?
首先,请注意,您需要确定每个特定面包屑导航项目 link 的逻辑。
据我从您的示例中可以看出,您正在使用以下约定来确定某个面包屑的 link 目的地:
面包屑的 link 目的地包括:
- 静态路径前缀(在您的情况下为
http://localhost:3000/int/en/admin/assets/
),
- 所有更高级别或相同级别的面包屑的串联,由
/
加入。如果是 item = 'company'
,那就是 downloads/company
、
- 和静态后缀
/path
.
要创建这些 link,您可以使用以下代码:
<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> <%= link_to "/ #{item}", path %></li>
<% end %>
</ol>
然而你的实际问题是:
How should be the logic to get every breadcrumb its own url?
您当前的约定(面包屑形式 links)有一些局限性,例如国际化很困难,我们无法支持逻辑面包屑结构不反映 url 结构的情况。
您可以使用散列图或树结构之类的东西来模拟实际站点结构,或者查看为此目的制作的 gem,例如 breadcrumbs_on_rails。
我的控制器包含:
@prefix = params[:asset_id]
其中 params[:asset_id] 包含子目录名称,如 [下载、公司、宣传册]。
我的观点包含:
<ol class="breadcrumb">
<li><%= link_to 'Start', admin_assets_path %></li>
<% for item in @prefix.split("/") %>
<li> <%= 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
让每个面包屑都有自己的逻辑应该如何 url?
首先,请注意,您需要确定每个特定面包屑导航项目 link 的逻辑。
据我从您的示例中可以看出,您正在使用以下约定来确定某个面包屑的 link 目的地:
面包屑的 link 目的地包括:
- 静态路径前缀(在您的情况下为
http://localhost:3000/int/en/admin/assets/
), - 所有更高级别或相同级别的面包屑的串联,由
/
加入。如果是item = 'company'
,那就是downloads/company
、 - 和静态后缀
/path
.
要创建这些 link,您可以使用以下代码:
<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> <%= link_to "/ #{item}", path %></li>
<% end %>
</ol>
然而你的实际问题是:
How should be the logic to get every breadcrumb its own url?
您当前的约定(面包屑形式 links)有一些局限性,例如国际化很困难,我们无法支持逻辑面包屑结构不反映 url 结构的情况。
您可以使用散列图或树结构之类的东西来模拟实际站点结构,或者查看为此目的制作的 gem,例如 breadcrumbs_on_rails。