17

我对我的面包屑解决方案有点不安全。名称和链接在每个控制器操作中定义:

<a href="http://localhost:3000/">Home</a>
<% if defined? @l1_link %>
  > <a href="<%= @l1_link%>"><%= @l1_name %></a>
  <% if defined? @l2_link %>
    > <a href="<%= @l2_link%>"><%= @l2_name %></a>
  <% end %>
<% end %>

这样我可以使用:

@l1_link = user_path()

问题:因为我没那么聪明——这种系统会在未来的某个地方导致灾难吗?这(严重)效率低下吗?

4

6 回答 6

32

面包屑菜单是大多数 Rails 应用程序中的一种循环模式。为了解决这个问题,我创建并发布了一个名为breadcrumbs_on_rails的插件。

您在控制器中定义面包屑

class MyController

  add_breadcrumb "home", root_path
  add_breadcrumb "my", my_path

  def index
    # ...

    add_breadcrumb "index", index_path
  end

end

然后你在你的视图中渲染它们。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <title>untitled</title>
</head>

<body>
  <%= render_breadcrumbs %>
</body>
</html>

即使您不想使用插件,我也鼓励您试一试。它是开源的,您可以为您的应用获取一些想法。

于 2010-02-17T13:13:55.450 回答
15

我制作了一个名为Gretel的 gem ,它是一个用于创建面包屑的 Ruby on Rails 插件。面包屑在单独的配置文件中配置并在视图中选择。

示例config/breadcrumbs.rb

crumb :root do
  link "Home", root_path
end

crumb :projects do
  link "Projects", projects_path
end

crumb :project do |project|
  link project.name, project_path(project)
  parent :projects
end

crumb :project_issues do |project|
  link "Issues", project_issues_path(project)
  parent :project, project
end

crumb :issue do |issue|
  link issue.name, issue_path(issue)
  parent :project_issues, issue.project
end

在您看来:

<% breadcrumb :issue, @issue %>

在您的 app/views/layouts/application.html.erb 中:

<%= breadcrumbs pretext: "You are here: " %>
于 2010-10-29T22:00:34.827 回答
12

这主要是一个意见问题,但无论如何:

  1. 我不希望视图中有那么多逻辑。我们可能都已经完成了,但它很快就会变得一团糟。
  2. 该代码对于影响树深度的未来更改是不安全的。
  3. 无论如何,我建议使用具有某些功能的适当对象,而不是链接变量*_nameand 。*_linklink_to

你可能会对Railscasts的第 162 集感兴趣,因为它有一个很好的解决方案

<% for page in @page.ancestors.reverse %>
  <%= link_to h(page.name), page %> &gt;
<% end %>
于 2010-02-17T12:58:54.607 回答
5

不要仅将任何插件用于面包屑。此链接提供了一种生成面包屑的有效方法。

http://szeryf.wordpress.com/2008/06/13/easy-and-flexible-breadcrumbs-for-rails/

虽然这是一个非常古老的帖子,但它仍然有效。

于 2012-06-25T18:30:10.313 回答
1

你也可以使用 Ariane http://github.com/simonc/ariane

有了它,您可以生成任何类型的面包屑,作为段落中的链接或 ul/li :)

如果您想要特定的东西,您可以创建自己的渲染器。

使用起来非常简单,只需将其添加到before_filter

ariane.add 'Home', root_path # in the app controller to have it everywhere
ariane.add 'Some Page', some_path
于 2012-03-16T13:52:44.683 回答
1

我做了一个crumble宝石叉子。它的配置选项很少,而且似乎已被废弃,但是当我尝试切换到breadcrumbs_on_railsorgretel时,我意识到我必须在我的视图或控制器中添加很多行(而且我有很多),但是crumble所有这些都存储了在一个配置文件中。如果您喜欢做一些补丁并且更喜欢在一个地方进行配置,我认为这是有史以来最好的解决方案。

于 2016-08-17T08:50:02.320 回答