Append class if condition is true in Haml

自古美人都是妖i 提交于 2019-11-26 11:51:19

问题


If post.published?

.post
  / Post stuff

Otherwise

.post.gray
  / Post stuff

I\'ve implemented this with rails helper and it seems ugly.

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

Second variant:

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

Is there a more simple and haml-specific way?

UPD. Haml-specific, but still not simple:

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

回答1:


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



回答2:


- 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



回答3:


Really the best thing is to put it into a helper.

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

#some_helper.rb

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



回答4:


HAML has a nice built in way to handle this:

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

The way that this works is that the conditional gets evaluated and if true, the string gets included in the classes, if not it won't be included.




回答5:


Updated Ruby syntax:

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


来源:https://stackoverflow.com/questions/3453560/append-class-if-condition-is-true-in-haml

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!