问题
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