2012-12-12 35 views
9

के लिए रेल सरल_फॉर्म चेकबॉक्स, मैं अपना फॉर्म बनाने के लिए सरलफॉर्म का उपयोग कर रहा हूं।सीरियलाइज्ड ऐरे फ़ील्ड

class ScheduledContent < ActiveRecord::Base 
    belongs_to :parent 
    attr_accessible :lots, :of, :other, :fields 
    serialize :schedule, Array 
end 

मैं एक रूप है, जहां कई अन्य क्षेत्रों और संगठनों के बीच (- तो काफी जटिल रूप में इस मॉडल वास्तव में पहले से ही एक has_many संघ का हिस्सा है) का निर्माण करना चाहते हैं:

मैं कहता हूँ निम्नलिखित मॉडल है एक उपयोगकर्ता को एक परिवर्तनीय संख्या के साथ प्रस्तुत किया जाता है (उदाहरण के लिए दिन 1, दिन 2, दिन 3, आदि) - और प्रत्येक दिन चेक या अनचेक किया जा सकता है। तो यदि कोई उपयोगकर्ता दिन 1 की जांच करता है, और दिन 5 कहता है - मैं शेड्यूल फ़ील्ड में [1, 5] स्टोर करना चाहता हूं। फॉर्म से पहले - मैं चुनने के लिए संभव दिनों की एक साधारण सरणी बना सकता हूं, जिसमें स्पष्ट रूप से पहले से ही चुने गए दिन शामिल हैं।

सरलफॉर्म के फॉर्म हेल्पर्स का उपयोग करके इस फ़ॉर्म का प्रतिनिधित्व करने का सबसे अच्छा तरीका क्या है? यदि ऐसा करना संभव नहीं है - मैं इसे काम करने के लिए रेल के फॉर्म हेल्पर्स का भी उपयोग कर सकता हूं, लेकिन मेरी वरीयता सरलफॉर्म है क्योंकि शेष फॉर्म पहले से ही सरलफॉर्म का उपयोग करके बनाया गया है।

उत्तर

21

हां, आप इसे सरलफॉर्म के साथ कर सकते हैं। यहां एक उदाहरण दिया गया है:

<%= simple_form_for(@user) do |f| %> 
    <%= f.input :schedule, as: :check_boxes, collection: [['Day 1', 1], ['Day 2', 2]] %> 
    <%= f.button :submit %> 
<% end %> 
+1

हाँ - यह मेरे लिए काम करता है। क्या यह भी कहने का कोई तरीका है कि कौन से चेक बॉक्स पहले ही चुने गए हैं? – Joerg

+0

एचआरएम, आपका क्या मतलब है? आपको यह जानने के लिए कब चाहिए? और क्यों? –

+0

मैं जानना चाहता हूं - अच्छी तरह से उपयोगकर्ता जानना चाहेगा - शेड्यूल में कौन से दिन पहले ही 'चुने गए हैं'। यह फ़ॉर्म एक नई और एक संपादन स्क्रीन दोनों पर दिखाई देता है। – Joerg

2

पुराने प्रश्न का उत्तर दें, लेकिन मुझे हाल ही में कुछ ऐसा करना पड़ा। पहले से चुने गए चेक बॉक्स विकल्पों को चिह्नित करने के लिए, मैंने :checked का उपयोग इस प्रकार किया:

<%= 
    form.input :schedule, { 
    as:   :check_boxes, 
    collection: Days.my_scope.map { |day| [day.name, day.id] }, 
    wrapper: :vertical_radio_and_checkboxes, 
    checked: form.object.schedule 
    } 
%>