2012-08-23 11 views
11

में शामिल नहीं किया गया है मेरे पास एक कार्य मॉडल है, जो एक उद्देश्य मॉडल के साथ कई से अधिक संबंधों में शामिल है।रेल रूपों - जब कोई चेकबॉक्स चेक नहीं किया जाता है, तो पोस्ट को पोस्ट

मेरे पास एक कार्य संपादन फ़ॉर्म है जहां कोई उपयोगकर्ता चेकबॉक्स के माध्यम से किसी कार्य को किसी कार्य के साथ जोड़ सकता है। जब चेकबॉक्स चेक किया जाता है, तो उसे कार्य और किसी विशेष उद्देश्य के बीच एक संबंध इंगित करना चाहिए; जब एक चेकबॉक्स चेक नहीं किया जाता है, तो कोई सहयोग नहीं होना चाहिए। फॉर्म सबमिट होने पर डेटाबेस को जारी रखा जाना चाहिए।

<%= form_for @task do |f| %> 
    <% Objective.all.each do |objective| %> 
    <%= check_box_tag :objective_ids, objective.id, @task.objectives.include?(objective), :name => 'task[objective_ids][]' %> 
    <% end %> 
    <%= f.button :submit %> 
<% end %> 

एक टास्क अपडेट कर रहा है जब तक कि एक चेकबॉक्स उपयोगकर्ता द्वारा जाँच की है बिलकुल ठीक काम करने के लिए लगता है, लेकिन उपयोगकर्ता किसी भी चेक बॉक्स की जाँच नहीं करता जब, :objective_ids परम (जो उद्देश्य आईडी की एक सरणी है) POST कार्रवाई में बिल्कुल शामिल नहीं है। इस वजह से, जब मैं नियंत्रक में @task.update_attributes(params[:task]) करता हूं, तो कार्य का उद्देश्य संग्रह का अद्यतन नहीं होता है (यानी कार्य के पास इसके साथ कोई उद्देश्य नहीं होना चाहिए, क्योंकि कोई चेकबॉक्स चेक नहीं किया गया था)।

तो मैं कैसे सुनिश्चित कर सकता हूं कि :objective_ids परम पोस्ट में शामिल है, भले ही केवल खाली सरणी के रूप में?

उत्तर

23

खाली मूल्य वाले सभी चेकबॉक्स के ऊपर छिपा हुआ फ़ील्ड जोड़ें। यदि उपयोगकर्ता ने कोई चेकबॉक्स चेक नहीं किया है तो यह भेजा जाएगा।

<%= form_for @task do |f| %> 
    <%= hidden_field_tag "task[objective_ids][]", nil %> 
    <% Objective.all.each do |objective| %> 
    <%= check_box_tag :objective_ids, objective.id, @task.objectives.include?(objective), :name => 'task[objective_ids][]' %> 
    <% end %> 
    <%= f.button :submit %> 
<% end %> 

इस बारे में एक अच्छा railscasts है।
आप इसके लिए source code भी देखना चाहेंगे।

+0

धन्यवाद। एक आकर्षण काम करता है। –

+2

यहां एक और समाधान: http://asciicasts.com/episodes/17-habtm-checkboxes –

+0

@ जिग्नेश, यह मेरे उत्तर में है;) – cutalion

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