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()
问题:因为我不是那么聪明 – 这种系统会不会在某个地方导致灾难? 这(严重)效率低下吗?
这主要是意见问题,但无论如何:
- 我不希望在视图中有那么多逻辑。 我们可能都已经完成了,但很快就会变得混乱。
- 代码对于影响树深度的未来更改是不安全的。
- 而不是链接变量
*_name
和*_link
,我建议使用正确的对象,使用一些link_to
function。
你可能会发现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
我做了一个crumble
gem叉。 它只有很少的配置选项而且看起来已经废弃了,但是当我尝试切换到breadcrumbs_on_rails
或者gretel
,我意识到我必须在我的视图或控制器中添加许多行(我有很多行),但是它crumble
了全部存储在一个配置文件中。 如果您想在一个地方做一些补丁并更喜欢配置,我认为这是有史以来最好的解决方案。