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.