如果条件在Haml中为真,则追加类

问题描述 投票:146回答:5

如果post.published?

.post
  / Post stuff

除此以外

.post.gray
  / Post stuff

我用rails helper实现了它,看起来很难看。

= 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

是否有更简单和特定于haml的方式?

UPD。特定于Haml,但仍然不简单:

%div{:class => "post" + (" gray" unless post.published?).to_s}
  / Post stuff
ruby haml
5个回答
318
投票
.post{:class => ("gray" unless post.published?)}

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

14
投票

真的最好的事情就是把它变成一个帮手。

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

#some_helper.rb

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

14
投票

HAML有一个很好的内置方式来处理这个:

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

这种方法的工作方式是条件得到评估,如果为真,则字符串包含在类中,否则不包括在内。


2
投票

更新的Ruby语法:

.post{class: ("gray" unless post.published?)}
© www.soinside.com 2019 - 2024. All rights reserved.