带有HAML的条件标签

时间:2010-06-19 19:25:54

标签: ruby-on-rails view haml

我有这个haml:

.kudobox
  %div.kudos= number_to_human_size_not_bytes kudos
  %div= (kudos == 1 || kudos == -1) ? "kudo" : "kudos"

现在我希望.kudobox有一个positivenegativezero类,具体取决于荣誉的数量:

-# < 0 kudos
<div class="kudobox negative">

-# == 0 kudos
<div class="kudobox zero">

-# > 0 kudos
<div class="kudobox positive">

我怎样才能做到这一点?感谢。


我知道我可以

%div{ :class => ( kudos < 0 ? "kudobox negative" : ( kudos == 0 ? "kudobox zero" : ( kudos > 0 ? "kudobox positive" : "kudobox impossible" ) ) ) }

但是有没有更短的方式?

2 个答案:

答案 0 :(得分:10)

我没有仔细查看你的代码(这有点令人困惑),告诉你是否有更短的方式,但我可以说你写得好得多一个辅助方法,而不是在视图中拥有所有逻辑。使用普通的 if case 语句的辅助方法可以更干净地完成工作,然后长度实际上不是一个因素。这样,您可以在视图中替换长条件语句,例如

%div{ :class => kudobox(kudos) }

答案 1 :(得分:0)

如果你只想要没有助手的短代码,那么你就是:

.kudobox(class="#{kudos<0?'negative':kudos==0?'zero':'positive'}")