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?)

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.


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(' '))

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.


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
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.