2011-10-02 19 views
15

ekleyerek "veriye" alanı ben:Raylar Formtastic: seçenek etiketi

form.input :duration, as: select, collection: {} 

ihtiyacım var:

<option value="" data-price="XXX"></option> 

Raylar HTML5 veri seçeneği etiketi için niteliklerini desteklemez. Bunun için bir yardımcı yöntem oluşturmak için Formtastic suggests.

Form etiketleri describes Giriş etiketlerinin nasıl genişletileceği. Ancak, select_input.rb içinde seçeneğini etkileyecek herhangi bir yöntem bulamıyorum. Peki bunu nasıl yaparım?

Ayrıca, tam olarak gereksinim duyduğum enhanced_select gem buldum, ancak formtastic ile çalışmayı başaramıyorum.

cevap

28

Aslında raylar, seçeneklere her türlü html etiketini eklemeyi destekliyor. Genellikle olurdu:

options_for_select([['First', 1], ['Second', 2]]) 

Eğer karma anahtarlar/değerler seçeneğine HTML niteliği olarak eklenecektir Her seçenek, örneğin için diziler içine bir karma eklerseniz size

<option value="1">First</option> 
<option value="2">Second</option> 

verecekti

options_for_select([['First', 1, {:'data-price' => 20}], 
        ['Second', 2, {:'data-price' => 30}]]) 

gerekli etiketleri üretecek: Bir modelin adı verilen Ürünleri sahip varsayarsak

<option value="1" data-price="20">First</option> 
<option value="2" data-price="30">Second</option> 
+0

Raylarda Olmayan 2.3. – Zabba

8

, aslında şöyle Formtastic'e yapabilirsiniz: yapıyorsun Esasen ne

form.select :duration, 
      collection: Items.map{|item| [item.name, item.id, {"data-price" => item.price}]} 

her dizideki son değerin bir karma olduğu bir dizi diziden geçiyor. E.g.

[ 
    ['Item 1', 1, {"data-price" => '$100'}], 
    ['Item 2', 2, {"data-price" => '$200'}] 
] 

Raylar 3+ (belki 2.x - Ben teyit etmedi) dizideki gibi bitözetini kalış seçenek etiketinin html ekleyecektir. Aşağıdaki size verilmesi:

<option data-price="$100" value="1">Item 1</option> 
<option data-price="$200" value="2">Item 2</option> 
2
options_for_select([ 
    ['Item 1', 1, data:{price: 121, delivery: 11}], 
    ['Item 2', 2, data:{price: 122, delivery: 22}] 
]) 

üretir verilerini kullanarak

<option data-delivery="11" data-price="121" value="1">Item 1</option> 
<option data-delivery="22" data-price="122" value="2">Item 2</option> 

Avantaj

: {...} daha özlü ve birden çok veri etiketlerini kullanarak eğer olduğunu can kodu kaydet.

İlgili konular