Лучший способ добавить «текущий» класс для навигации в Rails 3 - PullRequest
110 голосов
/ 14 сентября 2010

У меня есть несколько статических страниц в меню навигации. Я хочу добавить класс типа «текущий» к элементу, который отображается в данный момент.

Я делаю так, чтобы добавить тонны вспомогательных методов (каждый для одного элемента) для проверки контроллера и действия.

def current_root_class
  'class="current"' if controller_name == "homepage" && action_name == "index" 
end

<ul>
  <li <%= current_root_class %>><%= link_to "Home", root_path %>

Есть ли лучший способ сделать это !? Мой нынешний путь такой глупый ...

Ответы [ 24 ]

0 голосов
/ 25 марта 2012

все это работает с простыми навигационными панелями, но как насчет выпадающего подменю? при выборе подменю верхний пункт меню должен быть сделан «текущим» в этом случае tabs_on_rails мне будет решением

0 голосов
/ 29 ноября 2015

Если вы также хотите поддерживать хэш опций HTML в представлении. Например, если вы хотите вызвать его с другим классом CSS или идентификатором, вы можете определить вспомогательную функцию следующим образом.

def nav_link_to(text, url, options = {})
  options[:class] ||= ""
  options[:class] += " active"
  options[:class].strip!
  link_to text, url, options
end

Итак, в представлении, вызовите этого помощника так же, как вы бы вызвали link_to helper

<%= nav_link_to "About", about_path, class: "my-css-class" %>
0 голосов
/ 02 февраля 2013

Вот как я решил в моем текущем проекте.

def class_if_current_page(current_page = {}, *my_class)
    if current_page?(current_page)
      my_class.each do |klass|
        "#{klass} "
      end
    end
  end

Тогда ..

li = link_to company_path 
    class: %w{ class_if_current_page( { status: "pending" }, "active" ), "company" } do  
      Current Company
0 голосов
/ 21 июля 2015

Мой легкий путь -

application.html.erb * * 1006

<div class="navbar">
    <div class="<%= @menu1_current %> first-item"><a href="/menu1"> MENU1 </a></div>
    <div class="<%= @menu2_current %>"><a href="/menu2"> MENU2 </a></div>
    <div class="<%= @menu3_current %>"><a href="/menu3"> MENU3 </a></div>
    <div class="<%= @menu4_current %> last-item"><a href="/menu4"> MENU4 </a></div>
</div>

main_controller.erb

class MainController < ApplicationController
    def menu1
        @menu1_current = "current"
    end

    def menu2
        @menu2_current = "current"
    end

    def menu3
        @menu3_current = "current"
    end

    def menu4
        @menu4_current = "current"
    end
end

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...