2011-03-15 10 views
5

मैं रेल ऐप पर काम कर रहा हूं लेकिन निर्भर ड्रॉप डाउन सूचियों को कैसे संभालना है, यह नहीं मिल सकता है। मैं 3 मॉडल है: - श्रेणी है जो कई समूहों है - समूह जो कई सदस्यों है - सदस्यरेल पर निर्भर संग्रह_ फ़ील्ड फॉर्म

जब एक वर्ग का चयन किया जाता है, मैं इस सूची में नीचे दूसरे ड्रॉप पॉप्युलेट करने के लिए इस श्रेणी के भीतर समूहों चाहते हैं (और समूह और सदस्य के बीच एक ही बात)।

मैं निम्नलिखित प्रपत्र (स्पष्ट रूप से यह काम नहीं कर रहा मैं कैसे करना चाहते हैं के रूप में मैं विशेष मॉडल के लिए सभी वस्तुओं लेने के लिए) ...

<div class="field"> 
<%= f.collection_select(:category, Category.find(:all), :id, :name, {:include_blank => 'Category'}) %> 
</div> 
<div class="field"> 
<%= f.collection_select(:group, Group.find(:all), :id, :name, {:include_blank => 'Group'}) %> 
</div> 
<div class="field"> 
<%= f.collection_select(:member, Member.find(:all), :id, :name, {:include_blank => 'Member'}) %> 
</div> 
<div class="actions"> 
<%= f.submit %> 
</div> 

उन बनाने के लिए सबसे अच्छा तरीका क्या हो जाएगा खेतों पर निर्भर? मुझे वेब पर इसके बारे में कई विषय मिले लेकिन वास्तव में कोई जवाब नहीं मिला।

उत्तर

4

ऐसा करने का सबसे अच्छा तरीका AJAX कॉल है। शुरुआत में केवल ड्रॉप-डाउन श्रेणी ड्रॉप-डाउन। और श्रेणी के परिवर्तन पर एक अजाक्स कॉल और समूह बनाते हैं। और समूह ड्रॉप-डाउन परिवर्तन पर सदस्यों के लिए भी ऐसा ही करें। इस तरह

कोशिश कुछ:

$("#category']").click(function(){ 
    var url = '/get_drop_down_options?category_id=' + $(this).val() 
    $("#group").removeOption(/./) 
    $.get(url, function(data) { 
    $('#group').addOption(data, false); 
    }); 
}); 

अपने नियंत्रक में:

def get_drop_down_options 
    val = params[:category_id] 
    #Use val to find records 
    options = YourModel.collect{|x| "'#{x.id}' : '#{x.label}'"}  
    render :text => "{#{options.join(",")}}" 
end 

अब आप आंशिक आवश्यकता नहीं है।

+0

बहुत बहुत धन्यवाद !!! क्या आप jquery की सिफारिश करेंगे? – Luc

+0

हां। jQuery आपकी आवश्यकता के लिए सबसे उपयुक्त होगा – Ashish

+0

हम्म ... जब भी मैं JQuery का उपयोग करता हूं तब भी मुझे एक अजीब चीज है। $ .getJSON कुछ '' 1 ':' first ',' 2 ':' second '} जैसे कुछ पुनर्प्राप्त करेगा लेकिन यह JSON लड़का अमान्य JSON के रूप में फ़्लैग किया गया है ... क्या आपको कोई विचार होगा? – Luc

0

मेरे पास प्रत्येक फ़ील्ड के लिए एक अलग आईडी होगा, और कुछ jquery एनीमेशन और AJAX जादू का उपयोग करें: जब कोई फ़ील्ड क्लिक किया जाता है तो मैं उपसमूह के सभी रिकॉर्ड्स को पुनर्प्राप्त करने के लिए एक AJAX कॉल करता हूं, एक बार जब मैं उन्हें प्राप्त करता हूं, तो एक स्लाइड नीचे एनीमेशन, या इसी तरह के साथ div प्रकट होता है।

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