【问题标题】:Current page class in rails appRails 应用程序中的当前页面类
【发布时间】:2012-07-20 04:19:15
【问题描述】:

我的 Rails 应用中有简单的导航栏(Home、News、Contact 等)。我需要定义当前页面以添加:class => 'active'。我发现定义当前页面的解决方案很少。我什至创建了自己的版本。但所有这些都归结为一个:

<li class=<%= current_page?(tratata) ? "active" : nil %>...</li>

如何将此解决方案应用于所有<li> - elements,但不是每次都写这个?

【问题讨论】:

    标签: html ruby-on-rails html-lists current-page


    【解决方案1】:

    这不是最好的方法,但会给你一些关于拉动当前控制器和动作的想法。

    您可以查看https://github.com/weppos/tabs_on_rails,了解有关如何使其代码更简洁的更多想法。但这需要更多的设置。您将创建一个 tabs_tag 函数来检查当前页面并执行不同的样式。就个人而言,我并不太在意这个宝石,而是更喜欢以自己的方式设计我的页面。

    <%= tabs_tag do |tab| %>
      <%= tab.home      'Homepage', root_path %>
      <%= tab.dashboard 'Dashboard', dashboard_path %>
      <%= tab.account   'Account', account_path %>
    <% end %>
    
    if "#{controller.controller_name.to_s}.#{controller.action_name.to_s}" == "pages.index"
      <li class='active'>
    else
      <li>
    end
    

    或使用辅助方法

    def current_page(page,action)
      if controller.controller_name.to_s == page && controller.action_name.to_s == action
        'active'
      else
        'not_active'
     end
    end
    

    在你看来

    <li class="<%= current_page('pages','index') %>">
    

    【讨论】:

    • 等等。如果我使用它,我将拥有所有 &lt;li&gt; 元素和 class =&gt; 'not_active'
    • 这只是一个示例,您可以将else 部分省略。
    • 我明白了。这是比current_page?() 更短的解决方案,我喜欢这样。谢谢!但是我每次都必须在每个元素上写&lt;li class=...&gt;。
    【解决方案2】:

    执行此操作的一种方法是检查用户所在的页面是否与他们正在访问的控制器的名称匹配(您也可以将控制器名称/操作名称组合起来以获得额外的特异性)。

    application_helper

    def nav_helper(arg)
      controller_name == arg ? "current" : ""
    end
    

    查看

    <li class="<%= nav_helper('about') %>">
      <a href="#">A link</a>
    </li>
    

    编辑:

    糟糕,我在您编辑问题之前写了这篇文章。要将其添加到所有 'li' 标记,请使用另一个使用 content_tag 的助手并将 nav_helper 方法放入其中。

    【讨论】:

    • 我明白了,content_tag 会很好,但我的导航栏不是动态生成的。我需要为每个 &lt;li&gt; 元素使用这个助手吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 2020-03-11
    • 1970-01-01
    • 2015-02-02
    • 1970-01-01
    • 2012-06-13
    相关资源
    最近更新 更多