2011-10-02 24 views
15

के क्षेत्र मैं:रेल Formtastic: जोड़ने "डेटा-" विकल्प टैग

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

मैं की जरूरत है:

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

रेल विकल्प टैग के लिए एचटीएमएल 5 डेटा विशेषताओं का समर्थन नहीं करता। इसके लिए एक सहायक विधि बनाने के लिए फॉर्मेटास्टिक suggests

फॉर्मेटास्टिक रीडेम describes इनपुट टैग का विस्तार कैसे करें। हालांकि, select_input.rb में मुझे कोई भी विधि नहीं मिल सकती है जो विकल्प टैग को प्रभावित करेगी। फिर मेरे द्वारा इसे कैसे किया जाएगा?

इसके अलावा, मुझे enhanced_select मणि मिला जो वास्तव में मुझे चाहिए, लेकिन मैं इसे फॉर्मेटैस्टिक के साथ काम करने में सक्षम नहीं हूं।

उत्तर

28

असल में रेल विकल्प विकल्पों में किसी भी प्रकार का एचटीएमएल टैग जोड़ने का समर्थन करता है। आम तौर पर आप के लिए होता है:

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

जो आप

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

देना होगा आप प्रत्येक विकल्प हैश कुंजियों/मूल्यों विकल्प करने के लिए HTML विशेषता के रूप में जोड़ दिया जाएगा, उदा विन्यास में, एक हैश जोड़ते हैं

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

आवश्यक टैग का उत्पादन करेगा: मान लें कि आप एक मॉडल कहा जाता है आइटम

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

रेल 2.3 में नहीं। – Zabba

8

, आप वास्तव में इस formtastic में इतनी तरह कर सकते हैं:

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

आप अनिवार्य रूप से क्या कर रहे हैं सरणी की सरणी गुजर रही है जहां प्रत्येक सरणी में अंतिम मान हैश है। ईजी।

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

रेल 3+ (शायद 2.x - मैं इस बात की पुष्टि नहीं की थी) सरणी के रूप में ऐसे में हैश का उपयोग करें और बस विकल्प टैग के HTML करने के लिए जोड़ देगा। आप देते निम्नलिखित:

<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}] 
]) 

उत्पादन

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

लाभ

डेटा का उपयोग करना: {...} अधिक संक्षिप्त और अधिक डेटा टैग का उपयोग करता है, तो कर सकता है कोड बचाओ

संबंधित मुद्दे