0

我在我的应用程序的菜单栏中生成了一堆链接。当用户正在查看菜单栏的其中一个页面时,我希望更改样式以显示他们正在查看当前页面。这是一个非常简单的任务,我已经开始工作了。

我想做的是干掉我的助手。我正在建立这样的链接:

link_to('events', :controller => 'event_sections', :action => 'show', :group_id => @group), :class => "current_page_item"

我用“if is current page”代码重复了很多次。我想知道是否有一种好方法可以首先构建我需要的所有链接,然后将 :class => "current_page_item" 添加到其中。

4

3 回答 3

1

我想,这取决于您的“如果当前页面”逻辑有多复杂。我通常会创建一个简单的帮助程序,例如使用控制器名称和链接文本来确定链接是否为“当前”:

def tab(name, link)
  css_class = (controller.controller_name.humanize =~ /#{name}/i ? "current_page_item" : "page_item")
  link_to name, link, :class => css_class
end

然后,您可以在创建选项卡的地方调用它而不是 link_to:

= tab "Events", :controller => 'event_sections', :action => 'show', :group_id => @group
于 2010-12-16T16:42:34.043 回答
1

我会以不同的方式处理它:如何在控制器中设置像 @current_page_name 这样的变量(每个操作都会设置它),然后所有的 link_tos 都会在添加类之前检查该变量。

然后,为了进一步干掉它,您可以创建一个部分或一个函数来环绕您的 link_to(我看到 idlefingers 刚刚发布了一个类似的答案)。

于 2010-12-16T16:43:58.240 回答
1

link_to采用 URL 选项和 HTML 选项。您可以将它们放在自己的哈希中

link_to('events', :controller => 'event_sections', :action => 'show', :group_id => @group), :class => "current_page_item"

变成:

link_to'events', {:controller => 'event_sections', :action => 'show', :group_id => @group}, :class => "current_page_item"

注意控制器路径周围的新 { }。

于 2013-04-04T00:11:05.617 回答