【问题标题】:How do I add HTML options after link has been generated with link_to?使用 link_to 生成链接后,如何添加 HTML 选项?
【发布时间】:2010-12-16 16:33:17
【问题描述】:

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

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

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

我经常重复自己的“如果是当前页面”代码。我想知道是否有一种好方法可以首先构建我需要的所有链接,然后将 :class=> "current_page_item" 添加到其中。

【问题讨论】:

    标签: ruby-on-rails dry helper link-to html-helper


    【解决方案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"

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

    【讨论】:

      【解决方案2】:

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

      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
      

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-06-16
          • 1970-01-01
          • 2014-08-06
          • 1970-01-01
          • 2012-08-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多