2010-12-13 14 views
32

जब कोई उपयोगकर्ता एकाधिक चेकबॉक्स (उसी नाम मान के साथ) की जांच करता है तो स्थिति को संभालने का 'रेल मार्ग' क्या है, और इसे नियंत्रक पर वापस पोस्ट किया जाता है।रेल में, एकाधिक चेक किए गए चेकबॉक्स को कैसे संभालें, बस उस पर विभाजित करें, या?

तुम कैसे की जाँच करेगा अगर एक से अधिक आइटम का चयन किया गया है, तो ID मान आदि पर splitted

उत्तर

48

ऐसा करने का सबसे आसान तरीका है उन चेक बॉक्स सेट अप करने के लिए एक सरणी बनने वाली है।

HTML:

<input type="checkbox" name="tag_ids[]" value="1" /> 
<input type="checkbox" name="tag_ids[]" value="2" /> 
<input type="checkbox" name="tag_ids[]" value="3" /> 

नियंत्रक:

tag_ids = params[:tag_ids] 

(बेशक, आप शायद ध्यान में रखते हुए form_for आधारित सहायकों का उपयोग किया था, और इसलिए बड़े पैमाने पर बताए टैग आईडी यह। केवल सबसे सामान्य उदाहरण है।)

+0

उपयोगकर्ता एक चेकबॉक्स unselects तो क्या होता है ऐसा करने का "जिस तरह से रेल" पर पूरा ट्यूटोरियल मिल सकती है? क्या tag_ids [] को रिक्त सरणी के रूप में सबमिट किया जाएगा? –

+4

@ जो वैन डिक: यदि HTTP अनुरोध में 'टैग_आईड्स []' नामक कोई मान सबमिट नहीं किया गया है, तो रेल 'पैराम्स' में 'tag_ids' डालने के बारे में नहीं सोचेंगे। आपको इसके लिए खुद ही खाता लेना होगा, उदाहरण के लिए, 'पैराम्स [: टैग_आईडीएस] || = [] ' – Matchu

+8

इस एचटीएमएल को पाने के लिए, आप' f.check_box: tag_ids, {multiple: true}, 1, nil' । 'शून्य' का अर्थ है "छुपा 0 इनपुट के बिना"। इस तरह की चीज खराब दस्तावेज है। –

-2

यदि आप checked परम का उपयोग करना चाहते हैं तो आपको इसे लिखना होगा:

check_box_tag "tag_ids[]", 1, true 

और यह नहीं:

check_box_tag 'tag_ids[]', 1, true 

यह मुझे कुछ समय लिया यह पता लगाने की, मुझे आशा है कि यह किसी को मदद मिलेगी।

+0

तो आप कह रहे हैं कि सिंगल कोट्स '' 'बनाम डबल कोट्स' '"यहां एक अंतर बनाता है? –

14
f.check_box :tag_ids, {multiple: true}, 1, nil 

सही जवाब है:

यहाँ कारण है, एक 'एकाधिक: सच' है विकल्प आपके इनपुट के एक सरणी में रखा जा करने की अनुमति देता है। यदि कोई एकाधिक नहीं है: सही विकल्प की अनुमति नहीं दी जाएगी।

0

यहां उदाहरण और नियंत्रक का एक उदाहरण है उदाहरण के लिए जहां एकाधिक क्लीनर कई शहरों में हो सकते हैं।

<%= form_for(@cleaner) do |f| %> 
    <p> 
    <%= f.label :cities %><br /> 
    <% for city in City.all %> 
     <%= check_box_tag "cleaner[city_ids][]", city.id, @cleaner.cities.include?(city) %> 
     <%=h city.name %><br /> 
    <% end %> 
    </p> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

और नियंत्रक

def cleaner_params 
    params.require(:cleaner).permit(city_ids: []) 
end 

में आप इस https://kolosek.com/rails-join-table/

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