Ruby on Rails中的面包屑

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

Home  > <a href="https://stackoverflow.com/questions/2280648/breadcrumbs-in-ruby-on-rails/">  > <a href="https://stackoverflow.com/questions/2280648/breadcrumbs-in-ruby-on-rails/">   

这样我可以使用:

 @l1_link = user_path() 

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

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

  1. 我不希望在视图中有那么多逻辑。 我们可能都已经完成了,但很快就会变得混乱。
  2. 代码对于影响树深度的未来更改是不安全的。
  3. 而不是链接变量*_name*_link ,我建议使用正确的对象,使用一些link_tofunction。

你可能会发现Railscasts的第162集是一个很好的解决方案

 <% for page in @page.ancestors.reverse %> <%= link_to h(page.name), page %> > <% end %> 

Breadcrumbs菜单是大多数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 

并在视图中渲染它们。

     untitled   <%= render_breadcrumbs %>   

即使你不想使用插件,我也鼓励你去看看。 它是开源的,你可以为你的应用程序获取一些想法。

我创建了一个名为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: " %> 

不要仅仅为了面包屑而使用任何插件。 此链接提供了生成面包屑的有效方法。

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

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

这有两种方法:

拆分URL并显示它

在控制器中实现更灵活的解决方案,您可以在控制器中设置面包屑: 用于Rails的简单且灵活的面包屑

您也可以使用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 

我做了一个crumblegem叉。 它只有很少的配置选项而且看起来已经废弃了,但是当我尝试切换到breadcrumbs_on_rails或者gretel ,我意识到我必须在我的视图或控制器中添加许多行(我有很多行),但是它crumble了全部存储在一个配置文件中。 如果您想在一个地方做一些补丁并更喜欢配置,我认为这是有史以来最好的解决方案。