Programing

Haml에서 조건이 참인 경우 클래스 추가

lottogame 2020. 6. 10. 23:07
반응형

Haml에서 조건이 참인 경우 클래스 추가


만약 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

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

- 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

실제로 가장 좋은 방법은 도우미에 넣는 것입니다.

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

#some_helper.rb

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

HAML에는이를 처리 할 수있는 좋은 방법이 있습니다.

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

이것이 작동하는 방법은 조건이 평가되고 참이면 문자열이 포함되지 않으면 클래스에 문자열이 포함되는 것입니다.


업데이트 된 루비 구문 :

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

참고 URL : https://stackoverflow.com/questions/3453560/append-class-if-condition-is-true-in-haml

반응형