1

我有一个帮助方法来帮助确定导航菜单项是否应该处于活动状态/不活动状态。

  def events_nav_link
    nav_item = 'Events'

    if current_page?(events_path) # additional conditions here
      # do nothing
    else
      nav_item = link_to nav_item, events_path
    end

    content_tag(:li, nav_item + vertical_divider, :class => 'first')
  end

我希望此链接不仅对 events_path 页面无效,而且对其他页面也无效。问题是我不知道基于此路由传递 current_page?(path) 方法的参数是什么:

map.list_events '/events/:league/:year/:month/:day', :controller => 'events', :action => 'list'

此路由生成路径,例如 /pow 或 /chow/2011/09/25。联赛可以是 pow、chow 或 wow。

4

3 回答 3

2

我喜欢带有添加/删除类和 unwrap() 停用链接的不显眼的 JS 方法,但它需要特定的规则。

Rails 的方法是使用link_to_unless_current内置帮助器在当前页面 href 上突出显示和取消链接。

于 2011-09-27T00:47:24.967 回答
0

这就是我所做的:

application_helper.rb:

  def already_here?(this_controller,this_action)
    controller_name == this_controller && action_name == this_action ? true : false
  end

在一个视图中:

<%= already_here?("users","index") ? "Manage Users" : link_to("Manage Users", users_path, :title => "Manage Users.") %>

当然,如果需要,您可以通过将链接的标题和路径传递给助手来进一步抽象它,但这有点麻烦(对我来说)。

更新:没关系,看看米哈伊洛夫的回答 - 更干净(为什么要重新发明轮子?):)

于 2011-09-26T23:35:19.817 回答
0

您正在寻找命名路线。在您的 routes.rb 文件中,添加

:as => :foo

路线之后。然后使用

if current_page(events_path) || current_page(foo_path)

在你的情况下。

于 2011-09-26T23:36:12.847 回答