如何在HAML中使用if语句来控制标记类字符串?

时间:2012-03-16 03:32:30

标签: ruby-on-rails ruby ruby-on-rails-3 haml

我有一个条件,如果action_name包含“index”,那么第二个类只应返回“index”,否则,将其设置为action_name。

我正在尝试这些方面:

  - if action_name =~ /.*index.*/
    %body{ :class => "#{controller_name} index" }
  - else
    %body{ :class => "#{controller_name} #{action_name}" }

不幸的是,我的身体的其余部分位于布局之后,并且只显示else子句。

我认为我可以在这里使用一个更具可读性的一个衬垫,它可以在行内执行if与更详细的多行if语句,但我可以在这里使用一些帮助预期在HAML。

3 个答案:

答案 0 :(得分:3)

我将一个方法放在帮助器中。我喜欢把逻辑排除在我的观点之外。

<强> application_helper.rb

def get_class(name)
  "#{controller_name} #{(name =~ /.*index.*/) ? 'index' : name}"
end

查看

%body{ :class => get_class action_name }

答案 1 :(得分:2)

嗯,这是一个班轮:

%body{ :class => "#{controller_name} #{(action_name =~ /.*index.*/) ? 'index' : action_name}" }

虽然不那么可读!

答案 2 :(得分:1)

%body{:class => "#{controller_name} #{(action_name =~ /[index]/) ? 'index' : action_name}" }