Saya memiliki pernyataan pemilihan formulir, seperti ini:
= f.select :country_id, @countries.map{ |c| [c.name, c.id] }
Yang menghasilkan kode ini:
...
<option value="1">Andorra</option>
<option value="2">Argentina</option>
...
Tetapi saya ingin menambahkan atribut HTML khusus ke opsi saya, seperti ini:
...
<option value="1" currency_code="XXX">Andorra</option>
<option value="2" currency_code="YYY">Argentina</option>
...
ruby-on-rails
select
attributes
el_quick
sumber
sumber
Jawaban:
Rails DAPAT menambahkan atribut khusus untuk memilih opsi, menggunakan pembantu options_for_select yang ada. Anda hampir memasukkannya ke dalam kode pertanyaan Anda. Menggunakan atribut data html5:
Menambahkan seleksi awal:
Jika Anda memerlukan opsi yang dikelompokkan, Anda dapat menggunakan helper grouped_options_for_select, seperti ini (jika @continents adalah larik objek benua, masing-masing memiliki metode negara):
Kredit harus diberikan kepada paul @ pogodan yang memposting tentang menemukan ini bukan di dokumen, tetapi dengan membaca sumber rel. https://web.archive.org/web/20130128223827/http://www.pogodan.com/blog/2011/02/24/custom-html-attributes-in-options-for-select
sumber
Anda bisa melakukan ini sebagai berikut:
sumber
Ini tidak dapat dilakukan secara langsung dengan Rails, dan Anda harus membuat helper Anda sendiri untuk membuat atribut khusus. Meskipun demikian, mungkin ada dua cara berbeda untuk mencapai apa yang Anda inginkan:
(1) Menggunakan nama atribut khusus di HTML5. Di HTML5 Anda diizinkan untuk memiliki nama atribut khusus , tetapi harus didahului dengan 'data-'. Atribut khusus ini tidak akan dikirimkan bersama formulir Anda, tetapi dapat digunakan untuk mengakses elemen Anda dalam Javascript. Jika Anda ingin melakukannya, saya akan merekomendasikan membuat helper yang menghasilkan opsi seperti ini:
(2) Menggunakan nilai dengan pemisahan khusus untuk mengirimkan data tambahan. Jika Anda benar-benar ingin mengirimkan kode mata uang, saya akan merekomendasikan membuat kotak pilih Anda seperti ini:
Ini harus menghasilkan HTML yang terlihat seperti ini:
Yang kemudian dapat Anda parse di pengontrol Anda:
sumber
Hash atribut tambahan hanya didukung di Rails 3.
Jika Anda menggunakan Rails 2.x , dan ingin mengganti
options_for_select
Saya pada dasarnya hanya menyalin kode Rails 3. Anda perlu mengganti 3 metode ini:
Agak berantakan tapi itu pilihan. Saya menempatkan kode ini dalam modul pembantu yang disebut
RailsOverrides
yang kemudian saya sertakanApplicationHelper
. Anda juga dapat melakukan plugin / gem jika mau.Salah satu alasannya adalah untuk memanfaatkan metode ini, Anda harus selalu memanggil
options_for_select
secara langsung. Pintasan sepertiakan menghasilkan hasil yang lama. Sebaliknya itu harus:
Sekali lagi bukan solusi yang bagus, tetapi mungkin layak untuk mendapatkan atribut data yang sangat berguna.
sumber
Saya mengalami masalah ini juga dan membuat Permata Ruby "Enhanced_select" untuk memecahkan masalah ini. Anda dapat menemukannya di sini:
https://github.com/bkuhlmann/enhanced_select
sumber