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.