Условные теги с HAML - PullRequest
5 голосов
/ 19 июня 2010

У меня есть этот хамл:

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

Теперь я хочу, чтобы у .kudobox был класс positive, negative или zero, в зависимости от количества баллов:

-# < 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 ]

10 голосов
/ 20 июня 2010

Я не слишком внимательно изучил ваш код (читать его немного сложно), чтобы сказать вам, есть ли более короткий способ, но я могу сказать, что вам было бы гораздо лучше написатьвспомогательный метод, чем вся эта логика в представлении.Вспомогательный метод с простым старым оператором if или case сделает работу более аккуратной, и тогда длина на самом деле не будет фактором.Таким образом, вы могли бы заменить длинную условную формулировку на ваш взгляд чем-то легким для глаз, например

%div{ :class => kudobox(kudos) }
0 голосов
/ 27 марта 2013

Если вы хотите просто короткий код без помощника, вот вам:

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