用于 RESTful 轨道应用程序的简单面包屑

Chi*_*tan 3 rest ruby-on-rails breadcrumbs

是否有任何辅助方法(除了默认的 Rails breadcrumb)可以为特定页面动态生成面包屑导航,而无需在 RESTful 应用程序中传递琐碎的参数?也就是说,可以根据用户正在访问的 REST url 自动找出用户所在的位置?

\n\n

对于上述实现,我们需要传递参数,例如

\n\n

休息

\n\n
<% add_crumb(\xe2\x80\x98Profile\xe2\x80\x99, user_profile_path) %>\n
Run Code Online (Sandbox Code Playgroud)\n\n

当前页面

\n\n
<% add_crumb(\xe2\x80\x9cMy Incoming Messages\xe2\x80\x9d, request.path) %>\n
Run Code Online (Sandbox Code Playgroud)\n\n

必须有一种方法来概括代码,以便不需要传递参数,并且应该适用于具有最少配置的所有 RESTful 应用程序。

\n

Chi*_*tan 5

开发了一个简单的技巧。然而,该方法假设与 RESTful url 中的每个资源相对应的每个模型对象都存在一个方法“名称”。无论方法“名称”返回什么,都会显示为面包屑名称。如果未找到,则会按原样显示,而不链接到任何内容。使用的分隔符是“->”,您可以更改它以满足您的要求。

def get_bread_crumb(url)
  begin
    breadcrumb = ''
    sofar = '/'
    elements = url.split('/')
    for i in 1...elements.size
      sofar += elements[i] + '/'
      if i%2 == 0
        begin
          breadcrumb += "<a href='#{sofar}'>"  + eval("#{elements[i - 1].singularize.camelize}.find(#{elements[i]}).name").to_s + '</a>'
        rescue
          breadcrumb += elements[i]
        end
      else
        breadcrumb += "<a href='#{sofar}'>#{elements[i].pluralize}</a>"
      end
      breadcrumb += ' -> ' if i != elements.size - 1
    end
    breadcrumb
  rescue
    'Not available'
  end
end
Run Code Online (Sandbox Code Playgroud)

该方法一般接受request.url(给定当前页面的url)作为参数。该方法有目的地接受 url 以便进行自定义。要生成面包屑,只需在视图中添加以下代码 -

<%= get_bread_crumb(request.url) %>

对于 url /ideabox/2/idea/1,面包屑看起来像

替代文本 http://www.imagechicken.com/uploads/1234855404069992300.png

如果代码质量不是很好,请原谅。我确信这段代码可以被重构,但我也确信您能够在使用它之前做到这一点。

谢谢。