2010-06-19 17 views
5

mam ten haml:warunkowe tagi z haml

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

Teraz chcę .kudobox mają positive, negative lub zero klasy, w zależności od liczby Kudos:

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

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

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

Jak mogę osiągnąć to? Dzięki.


wiem mogę

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

Ale nie istnieje krótsza droga?

Odpowiedz

10

Nie wyglądał zbyt ściśle w kodzie (to trochę mylące do odczytu), aby stwierdzić, czy istnieje krótszy droga, ale mogę powiedzieć, że będziesz dużo lepiej pisać metody pomocnika niż mając całą tę logikę w widoku. Metoda pomocnicza z prostym, starym stwierdzeniem, mogłaby wykonać zadanie bardziej czysto, a wtedy długość nie byłaby tak naprawdę czynnikiem. W ten sposób, można wymienić oświadczenie długo warunkowego w widoku z czymś łatwym dla oczu, jak

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

Tak, Zrób to. To doskonały przypadek dla pomocnika. –

0

Jeśli chcesz tylko krótki kod bez pomocnika, tu jesteś:

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