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

4
如果 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个回答

3

好的,这是一个简短的一句话:

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

虽然不太易读!


3

我会把这个方法放在一个帮助类中。我喜欢让逻辑不涉及到视图。

application_helper.rb

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

视图

%body{ :class => get_class action_name }

好主意...我明天有空的时候会研究一下。谢谢! - ylluminate

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接