kelas bersyarat dinamis ramping [tertutup]

100

Hanya untuk membantu pengembang lain, karena tidak ada pertanyaan serupa di SO.

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

Jawaban:

144

Lihat contoh di bawah ini:

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

Pendekatan yang sama dapat digunakan untuk menetapkan nilai dinamis ke atribut lain.

Sergey Alekseev
sumber
2
Bagaimana Anda melakukannya untuk berbagai kondisi?
Maxim Zubarev
Lihat di bawah di komentar untuk jawaban Anda.
Sergey Alekseev
3
Ini juga dapat menambahkan kelas, seperti: div.councilor class=(councilor.retired? ? "retired" : "") menghasilkan:div.councilor.retired
Terra Ashley
20

Saya menggunakan array kelas dan elemen nil jika tidak perlu menyertakan kelas dalam daftar, kemudian larik kompak untuk menghapus elemen nil dan akhirnya bergabung semuanya.

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

Jika Anda memiliki beberapa kondisi yang saya lakukan sekarang seperti

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

Meskipun saya merasa jika is_bar menjadi cacat? return false dan HTML yang dihasilkan menghasilkan

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

(noda adalah karakter kosong setelah foo). Jika seseorang punya solusi untuk itu akan luar biasa.

Maxim Zubarev
sumber
7
Cobalah String#rstripdalam hal ini dengan 2 kondisi: div class=((('foo ' if is_foo?) + ('bar' if is_bar?)).rstrip). Atau div class=([('foo' if is_foo?), ('bar' if is_bar?)].compact.join(' '))untuk beberapa kondisi.
Sergey Alekseev