我怎么能有条件地设计一个<li>在轨道上?

Not*_*Dan 7 ruby-on-rails

我有一个使用ul作为工具栏的rails应用程序.我想要一个样式(选中)应用于用户所在的页面.

我怎样才能做到这一点?

这是我到目前为止,但所选的样式是硬编码的,我也不知道如何知道选择了哪个页面.

      <ul>
        <li class="firstItem"><%= link_to "About", '/about' %></li>
        <li class="item"><%= link_to "Page1", '/page1' %></li>
        <li class="item selected" <%= link_to "Page2", '/page2' %></li>
        <li class="item"><%= link_to "Contact", '/contact' %></li>
        <li class="lastItem"><%= link_to "Blog", '/blog' %></li>
      </ul>
Run Code Online (Sandbox Code Playgroud)

nic*_*ria 8

我完全同意Jarrod的建议,但是如果您遇到处理其他条件的需要(并希望避免在HTML代码中使用丑陋的嵌入式ruby),请查看Rails的content_tag方法.

有了它,您可以替换以下内容:

<li class=<%= @post.active? ? 'active' : 'suspended' %>>
  <%= link_to @post.name, post_path(@post) %>
</li>
Run Code Online (Sandbox Code Playgroud)

有类似的东西:

<%= content_tag :li, link_to(@post.name, post_path(@post), :class => @post.active? ? 'active' : 'suspended' %>
Run Code Online (Sandbox Code Playgroud)

当然,将这些代码粘贴到帮助器中并从那里调用它将为您赢得更多的优雅点.

希望这可以帮助.

PS:这是我在Stackoverflow上的第一篇文章,请温柔.:)


den*_*min 5

如果每个li链接到不同的控制器,您可以使用它controller_name来添加或不添加selected该类

这是我的应用程序中的一个示例,它是haml

  %ul
    %li
      %a{:href => '/kebabs', :class => ('current' if controller_name == 'kebabs')} Admin kebabs
    %li
      %a{:href => '/statistics', :class => ('current' if controller_name == 'statistics')} Statistiques
    %li
      %a{:href => '/people', :class => ('current' if controller_name == 'people')} Admin Personnes
Run Code Online (Sandbox Code Playgroud)

干杯