Если заявление с кодом на том же блоке в хамле, RoR - PullRequest
0 голосов
/ 29 марта 2010

У меня есть это представление Haml:

!!! strict
 %html{:xmlns => "http://www.w3.org/1999/xhtml"}
   %head
     %meta{:content => "text/html; charset=utf-8", "http-equiv" => "Content-Type"}
     %title
       Lighty | #{@page_title || "Home"}
   %body
     #popup Login here
     #fade
     #wrapper
       #container
         #header
           %a#logo{:href => "/"}
         #menu
           %ul#main
             %li#lighty
               %a{:href => "/"} Lighty
                 %ul
                    %li
                       %a Link here
             %li#community
               %a{:href => "/community"} Community
        #content

И я хотел бы добавить строку if в строке # 16, чтобы проверить, является ли она посещаемой в данный момент страницей, и добавить класс «active» в li, если он возвращает true.

Как мне написать это, если там есть заявление и есть ли более простой способ сделать это?

Сейчас я планирую использовать переменную типа @current_page и проверить, если @current_page == "community", и добавить класс, если он возвращает true.

Я не так думаю? Есть ли более простой способ сделать это?

Ответы [ 2 ]

2 голосов
/ 29 марта 2010

Я бы настоятельно рекомендовал создать вспомогательный метод с именем visited_class или что-то подобное, поскольку он должен иметь доступ к текущему контроллеру / действию. Затем вы можете написать всю логику кода внутри вспомогательного метода. Это сохраняет ваши взгляды значительно чище.

Вы можете разместить это во многих местах, но, поскольку у меня так мало помощников, я обычно просто помещаю его в ApplicationHelper:

def ApplicationHelper

  def visited_class(controller, action)
    if params[:controller] == controller && params[:action] == action
      return " active"
    else
      return ""
    end
  end

end

Затем в вашем файле view / HAML просто вызовите visited_class и передайте контроллер / действие, которое вы хотите проверить. Вы также можете использовать параметр URL и собрать его вместе из request.request_uri, но это может быть немного утомительнее.

1 голос
/ 29 марта 2010

Добавьте метод visited_class, предложенный Topher, в файл app\helpers\application_helpers.rb. Чтобы добавить класс к элементу li, измените свой HAML следующим образом:

%li#lighty{:class => "#{visited_class('pages', 'show')}"}
  %a{:href => "/"} Lighty
    %ul
      %li
        %a Link here
...