2012-03-16 17 views
3

我有一个条件,如果action_name包含“索引”,那么第二个类只应返回“索引”,否则,将其设置为action_name。如何在HAML中使用if语句来控制标记类字符串?

我试图沿着这些路线的东西:

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

不幸的是我有我的身体的其余部分在下面这些布局和它只是显示为else条款。

我觉得还有一个更具可读性的衬垫,我可以在这里使用它,它会执行一个if内部行和更详细的多行if语句,但是我可以在这里使用一些帮助来实现此功能正如HAML预期的那样。

回答

2

嗯,这里是一个班轮:

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

不就是可读,但!

+0

谢谢! :)完美。 – ylluminate 2012-03-16 03:53:17

3

我会把一个方法放在助手中。我喜欢将逻辑放在我的观点之外。

application_helper.rb

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

视图

%body{ :class => get_class action_name } 
+0

好主意......当我明天有空时,我会研究一下。谢谢! – ylluminate 2012-03-16 06:58:37

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