ince dinamik koşullu sınıf [kapalı]


101

Diğer geliştiricilere yardımcı olmak için, çünkü SO'da benzer bir soru yok.

div class=(is_active? ? 'active' : 'inactive')
div class=('active' if is_active?)

Yanıtlar:


145

Aşağıdaki örneklere bakın:

div class=(is_active? ? 'active' : 'inactive')
div class=('active' if is_active?)

Aynı yaklaşım, diğer özniteliklere dinamik değerler atamak için kullanılabilir.


2
Bunu birden çok koşul için nasıl yaparsınız?
Maxim Zubarev

Cevabınıza verilen yorumlarda aşağıya bakın.
Sergey Alekseev

3
Bu aynı zamanda şunun gibi bir sınıf da ekleyebilir: div.councilor class=(councilor.retired? ? "retired" : "") oluşturur:div.councilor.retired
Terra Ashley

20

Listeye sınıf eklemeye gerek yoksa sınıflar dizisi ve nil öğesi kullanıyorum, daha sonra sıfır öğeleri kaldırmak ve sonunda hepsini bir araya getirmek için kompakt dizi.

div class=(["cday", "col-md-1", day.day == 1 ? "col-md-offset-#{day.cwday-1}" : nil].compact.join(' '))

12

Birden fazla koşulunuz varsa, şu anda şöyle bir şey yapıyorum

div class=(('foo ' if is_foo?) + ('bar' if is_bar?))

İs_bar if bir kusur olduğunu düşünmeme rağmen? false döndürür ve oluşturulan HTML sonucu

<div class="foo "></div>

(leke, 'den sonraki boş karakterdir foo). Birinin bunun için bir çözümü olsaydı harika olurdu.


7
Deneyin String#rstrip2 koşullarla bu durumda: div class=((('foo ' if is_foo?) + ('bar' if is_bar?)).rstrip). Veya div class=([('foo' if is_foo?), ('bar' if is_bar?)].compact.join(' '))birkaç koşul için.
Sergey Alekseev
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.