Tambahkan kelas jika kondisinya benar di Haml


155

Jika post.published?

.post
  / Post stuff

Jika tidak

.post.gray
  / Post stuff

Saya sudah menerapkan ini dengan helper helper dan sepertinya jelek.

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

Varian kedua:

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

Apakah ada cara yang lebih sederhana dan spesifik-haml?

UPD. Khusus Haml, tetapi masih tidak sederhana:

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

Jawaban:


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

73
hanya catatan tambahan untuk banyak kondisi `{class: [('class1' kecuali condition1), ('class2' if condition2)]}` .. etc
Mohammad AbuShady

5
Lebih ringkas untuk beberapa kondisi:{ class:[ (:class1 if cond1), (:class2 if cond2) ] }
Phrogz

1
Catatan: tanda kurung diperlukan atau Anda akan mendapatkan kesalahan sintaksis ruby.
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
Tidak terlalu ringkas, tetapi terlihat lebih baik daripada cara lain jika dimasukkan ke dalam pembantu.
Simon Perepelitsa

3
Ini bekerja dengan baik - saya perhatikan bahwa Anda tidak membutuhkannya .compact.join(" "). Anda dapat melakukannya:class => ["post active", ("gray" unless post.published?)]
Stenerson

15

Sungguh hal terbaik adalah memasukkannya ke dalam pembantu.

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

#some_helper.rb

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

Saya telah memasukkan ini ke file pembantu saya, tetapi aplikasi saya memberi tahu saya, bahwa tidak ada variabel "posting".
Simon Perepelitsa

2
fyi: jika Anda hanya ingin memasukkan kelas dalam kasus tertentu dan tidak ada dalam kasus lain Anda hanya dapat mengatur nildan atribut tidak akan ditetapkan, alih-alih pengaturanclass=""
MMachinegun

14

HAML memiliki cara yang bagus untuk menangani hal ini:

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

Cara ini berfungsi adalah bahwa kondisional akan dievaluasi dan jika benar, string akan dimasukkan dalam kelas, jika tidak maka tidak akan dimasukkan.


5

Sintaks Ruby yang diperbarui:

.post{class: ("gray" unless post.published?)}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.