将路径传递给current_page方法

时间:2011-09-26 23:17:23

标签: ruby-on-rails routes actionview actionviewhelper

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

  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?(路径)方法的参数:

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

此路线生成路径,例如/ pow或/ chow / 2011/09/25。联盟可以是战利品,食物或者哇。

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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.") %>

当然,如果你愿意的话,你可以通过将链接的标题和路径传递给帮助者来进一步抽象它,但这对我来说有点麻烦。

更新:没关系,请参阅mikhailov的答案 - 更清洁(为什么重新发明轮子?):)

答案 2 :(得分:0)

您正在寻找named routes。在routes.rb文件中,添加

:as => :foo

路线后。然后使用

if current_page(events_path) || current_page(foo_path)

在您的情况下。