我在我的应用上的菜单栏中生成了一堆链接。当用户正在查看菜单栏的其中一个页面时,我希望更改样式以显示他们正在查看当前页面。这是一项非常简单的任务,我已经开始工作了。
我想做的是让我的助手干涸。我正在建立这样的链接:
link_to('events', :controller => 'event_sections', :action => 'show', :group_id => @group), :class => "current_page_item"
我正在用'if is current page'代码重复自己。我想知道是否有一个很好的方法来首先构建我需要的所有链接然后添加:class =>它的“current_page_item”。
答案 0 :(得分:1)
这取决于你的'if current page'逻辑是多么复杂,我想。我通常会创建一个简单的帮助程序,例如使用控制器名称和链接文本来确定链接是否为“当前”:
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
答案 1 :(得分:1)
我会以不同的方式处理它:如何在控制器中设置像@current_page_name这样的变量(每个动作都会设置它),然后你的所有link_tos都会在添加类之前检查该变量。
然后,为了让它干得更多,你可以创建一个部分或一个函数来包裹你的link_to(我看到那些空闲的指针只是张贴了类似的答案)。
答案 2 :(得分:1)
link_to
获取网址选项和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"
注意控制器路径周围的新{}。