如果语句包含haml中相同块的代码,则为RoR

时间:2010-03-29 16:33:58

标签: ruby-on-rails ruby haml

我有这个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

我想在第16行添加if以检查它是否是当前访问过的页面,如果它返回true,则将“active”类添加到li

如何在那里写if语句并且有更简单的方法吗?

我现在的计划是使用@current_page之类的变量并测试@current_page == "community"是否为{{1}},如果它返回true则添加一个类。

我错了吗?有没有更简单的方法来实现这个目标?

2 个答案:

答案 0 :(得分:2)

我强烈建议创建一个名为visited_class的类型的辅助方法,因为它应该可以访问当前的控制器/动作。然后,您可以在辅助方法中编写所有代码的逻辑。这可以使您的观点更加清晰。

你可以把它放在很多地方,但由于我帮助的人很少,我通常会把它放在ApplicationHelper中:

def ApplicationHelper

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

end

然后,在您的视图/ HAML文件中,只需调用visited_class并传入您要检查的控制器/操作。您也可以使用URL参数并将其从request.request_uri拼凑在一起,但这可能会更乏味。

答案 1 :(得分:1)

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