2013-03-06 30 views
87

Sadece diğer geliştiricilere yardımcı olmak için, SO ile benzer bir soru yoktur. Aynı yaklaşım diğer özellikler dinamik değerler atamak için kullanılabilirince dinamik koşullu sınıf

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

:

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

cevap

116

Aşağıdaki örneklere bakın. Bunun bir leke is_bar eğer olmak nasıl bir duygu olmama rağmen Ben

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

gibi bir şey şu anda birden fazla koşul

+2

yapardın Nasıl birden koşulları için? –

+0

Cevabınıza yorumlarda aşağıya bakın. –

+0

Bu, aşağıdaki gibi bir sınıf da ekleyebilir: 'div.councilor class = (councilor.retired??" Emekli ":" ")' oluşturur: div.councilor.retired' –

11

yapıyorum varsa? (Leke foo sonra boş karakter)

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

yanlış ve oluşturulan HTML sonuçları döndürür. Birisi bunun için bir çözüm olsaydı harika olurdu.

+6

Bu durumda String # rstrip'i deneyin. 2 koşullu: 'div class = ((('if is_foo?' ise foo ') + (' bar 'eğer is_bar?)). rstrip)'. Veya 'div class = ([('if is_foo?' Ise 'foo'), ('bar' eğer is_bar?)]. Compact.join (''))' Çeşitli koşullar için. –

17

Listeye sınıf eklemenin gerekmemesi durumunda, sınıf öğelerini ve sıfır öğelerini kullanıyorum, ardından nil öğelerini kaldırmak ve son olarak tüm öğelere katılmak için kompakt dizi kullanıyorum.

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