Додайте клас, якщо умова відповідає Haml


155

Якщо post.published?

.post
  / Post stuff

Інакше

.post.gray
  / Post stuff

Я реалізував це за допомогою помічника рейок, і це здається некрасивим.

= content_tag :div, :class => "post" + (" gray" unless post.published?).to_s do
  / Post stuff

Другий варіант:

= content_tag :div, :class => "post" + (post.published? ? "" : " gray") do
  / Post stuff

Чи є більш простий і специфічний для хлопчика спосіб?

UPD. Хамль-специфічний, але все ще не простий:

%div{:class => "post" + (" gray" unless post.published?).to_s}
  / Post stuff

Відповіді:


331
.post{:class => ("gray" unless post.published?)}

73
лише бічна примітка для кількох умов `{class: [('class1', якщо умова1), ('class2' якщо умова2)]}` .. тощо
Мохаммед АбуШаді

5
Більш лаконічний для декількох умов:{ class:[ (:class1 if cond1), (:class2 if cond2) ] }
Фрогз

1
Примітка. Дужки в дужках потрібні, або ви отримаєте помилку синтаксису рубіну.
Topher Fangio

21
- classes = ["post", ("gray" unless post.published?)]
= content_tag :div, class: classes do
  /Post stuff

def post_tag post, &block
  classes = ["post", ("gray" unless post.published?)]
  content_tag :div, class: classes, &block
end

= post_tag post
  /Post stuff

1
Не настільки стисло, але виглядає краще, ніж інші способи, якщо його помістити в помічник.
Саймон Перепелиця

3
Це добре працює - я помітив, що вам це не потрібно .compact.join(" "). Можна просто зробити:class => ["post active", ("gray" unless post.published?)]
Stenerson

15

Дійсно найкраще - це помістити його в помічника.

%div{ :class => published_class(post) }

#some_helper.rb

def published_class(post)
  "post #{post.published? ? '' : 'gray'}"
end

Я помістив це у свій файл помічників, але моя програма говорить мені, що немає змінної "пост".
Саймон Перепелиця

2
fyi: якщо ви хочете включити клас лише у певному випадку, а нічого в інших випадках, ви можете просто встановити, nilа атрибут не буде встановлений, а не встановитиclass=""
MMachinegun

14

HAML має чудово побудований спосіб вирішити це:

.post{class: [!post.published? && "gray"] }

Як це працює, це те, що умовне оцінюється, і якщо це правда, рядок включається в класи, якщо ні, то він не буде включений.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.