2015-12-15 11 views
9

किसी भी कारण से जब कोई उपयोगकर्ता किसी प्रविष्टि को संपादित करने के लिए जाता है तो .select2 के माध्यम से इनपुट किए गए किसी भी डेटा को दिखाया नहीं जाता है। हालांकि डेटा बचाया गया था।चयन 2 संपादित करें

irb(main):001:0> Routine.find(1) 
=> #<Routine id: 1, missed_days: 0, date_started: "2015-10-24 04:00:00", trigger: "brew tea", action: "stretch", user_id: 1, created_at: "2015-11-24 21:55:25", updated_at: "2015-12-14 21:00:09", committed: ["sun", "mon", "tue", "wed", "thu", "fri", "sat", ""], days_challenged: 30> 

show.html.erb

enter image description here

edit.html.erb

enter image description here

_form.html.erb

<%= simple_form_for(@routine, remote: request.xhr?, html: { data: { modal: true } }) do |f| %> 
    <%= f.date_select :date_started, :order => [:month, :day, :year], class: 'date-select' %> 
    <%= f.collection_check_boxes :committed, Date::ABBR_DAYNAMES, :downcase, :to_s %> 
    <%= f.number_field :days_challenged, value: 30, class: 'day-challenge' %> <b>Day Challenge 
    <label>After I</label> 
    <%= f.grouped_collection_select(:trigger, @trigger, :last, :first, :to_s, :to_s, include_blank: true) %><font color="#DDD">,</font> 
    <label>I will</label> 
    <%= f.grouped_collection_select(:action, @action, :last, :first, :to_s, :to_s, include_blank: true) %>. 
    <%= button_tag(type: 'submit', class: "btn") do %> 
    Save 
    <% end %> 
<% end %> 

<script> 
    $("#routine_trigger").select2({ 
    placeholder: "Existing Habit (Optional)", 
    theme: "classic", 
    allowClear: false, 
    tags: true, 
    multiple: false, 
    }); 
    $("#routine_action").select2({ 
    placeholder: "Enter Challenge", 
    allowClear: false, 
    tags: true, 
    multiple: false, 
    }); 
</script> 

routines_controller

def new 
    @trigger = 
    [ 
    ['Morning', ['Get Out of Bed', 'Clean Up Breakfast', 'Brush My Teeth', 'Sit at Desk', 'Start My Computer']], 
    ['Afternoon', ['Drink Coffee', 'Read Email', 'Eat Lunch', 'Use the Bathroom', 'Go for a Walk']], 
    ['Evening', ['Enter My Home', 'Eat a Snack', 'Make a Drink', 'Shower', 'Finish Dinner']] 
    ] 
    @action = 
    [ 
    ['Mind', ['Write 500 Words', 'Read a Chapter', 'Study 20 min', 'Watch a Ted Talk', 'Take a Picture']], 
    ['Body', ['Do 25 Pushups', 'Juice Cleanse', 'Walk 10,000 Steps', 'Exercise', 'Eat an Apple']], 
    ['Spirit', ['Meditate', 'Write 3 Gratitudes', 'Journal', 'Not Complain', 'Do a Random Act of Kindness']] 
    ] 
    if current_user == nil 
     @routine = Routine.new 
    else 
     @routine = current_user.routines.build 
     respond_modal_with @routine 
    end 
    end 

    def edit 
    @trigger = 
    [ 
    ['Morning', ['Get Out of Bed', 'Clean Up Breakfast', 'Brush My Teeth', 'Sit at Desk', 'Start My Computer']], 
    ['Afternoon', ['Drink Coffee', 'Read Email', 'Eat Lunch', 'Use the Bathroom', 'Go for a Walk']], 
    ['Evening', ['Enter My Home', 'Eat a Snack', 'Make a Drink', 'Shower', 'Finish Dinner']] 
    ] 
    @action = 
    [ 
    ['Mind', ['Write 500 Words', 'Read a Chapter', 'Study 20 min', 'Watch a Ted Talk', 'Take a Picture']], 
    ['Body', ['Do 25 Pushups', 'Juice Cleanse', 'Walk 10,000 Steps', 'Exercise', 'Eat an Apple']], 
    ['Spirit', ['Meditate', 'Write 3 Gratitudes', 'Journal', 'Not Complain', 'Do a Random Act of Kindness']] 
    ] 
    respond_modal_with @routine 
    end 
+0

आप का प्रयास किया 'चयनित: f.object.something'? –

+0

क्या आप सफलतापूर्वक जमा करने के बाद select2 मान को रीसेट कर रहे हैं? – xkcd149

+0

यदि मैं संपादन फॉर्म पर सहेजता हूं तो यह तब तक रीसेट करेगा जब तक कि मैं मान को तब तक रीसेट नहीं करूँगा जब तक कि मैं मान को वापस @ xkcd149 –

उत्तर

3

यह

<%= f.input :field_name, as: :select, collection: f.object.field_name, include_blank: false, selected: f.object.field_name, input_html: { class: "json_data" }, %> 

json_data कैसे मैं एक का चयन करें 2

में पाठ क्षेत्र बनाने के है क्या मैं अपने Select2 क्षेत्रों पर क्या है

कॉफी

$('.json_datas').before()-> 
    "<input name='#{@.name}' type='hidden' />" 
    $('.json_data').select2 
    allowClear: true, 
    placeholder: "Select a value", 
    ajax: 
     url: '/api/call_to_data' 
     dataType: 'json' 
     delay: 250 
     data: (params) -> 
     { 
      q: params.term 
      page: params.page 
     } 
     processResults: (data, page) -> 
     # parse the results into the format expected by Select2. 
     # since we are using custom formatting functions we do not need to 
     # alter the remote JSON data 
     { results: data.items } 
     cache: true 

मुझे आशा है कि यह आप

+0

मैं यहां आपके कोड से संघर्ष कर रहा हूं। क्या 'grouped_collection_select' के साथ ऐसा करने का कोई तरीका नहीं है? –

+0

मैं क्या करता हूं मेरे पास एक नियमित टेक्स्ट फ़ील्ड है जो तब चयन 2 इसे एक चुनिंदा क्षेत्र में बनाता है। जानना महत्वपूर्ण है कि मैं 'json_data' नामक एक वर्ग का उपयोग करता हूं जो jquery पर कार्रवाई करता है। चयन 2 का उपयोग करते समय मैं एक छिपे हुए फ़ील्ड को उसी क्षेत्र के साथ शामिल करना चाहता हूं, जैसा कि मैं शून्य मानों के मामले में चयन 2 का उपयोग करना चाहता हूं। लेकिन यह जानना महत्वपूर्ण है कि वैल्यू को पॉप्युलेट करने के लिए डेटा AJAX url – MZaragoza

0

में मदद करता है आप कुछ चुनिंदा क्षेत्र के लिए विधि grouped_collection_select उपयोग कर रहे हैं के बाद से, इसे और अधिक समझ बनाने के पारित करने के लिए होगा: चयन के लिए विकल्प हैश में चयनित मान (रों)। जाहिर है, जब आप आंशिक को new.html.erb से कॉल कर रहे हैं तो आप इसे खाली के रूप में पारित कर सकते हैं और जब आप संपादन के लिए edit.html.erb से आंशिक कॉल कर रहे हैं तो आप कुछ मान पास कर सकते हैं।
उदा।
grouped_collection_select(:city, :country_id, @continents, :countries, :name, :id, :name, { :selected => [1, 5, 6 ] })

अधिक पर पढ़ें: http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/grouped_collection_select#1538-Preselecting-options

+0

से आता है, फिर सेट करें: जब आप संपादन के लिए फॉर्म प्रस्तुत करते हैं तो उन मानों में चुने गए हैं, अन्यथा छोड़ दें: चयनित सरणी खाली। – Veets

+0

चूंकि आप किसी प्रपत्र का आंशिक उपयोग कर रहे हैं, इसलिए आप एक चर को मान के साथ पास कर सकते हैं: चयनित विकल्प। New.html.erb से आंशिक रूप से फ़ॉर्म को कॉल करते समय, इस चर को [] के रूप में भेजें और edit.html.erb से आंशिक रूप से फ़ॉर्म को कॉल करते समय इस चर को [some_value] के रूप में पास करें: चयनित विकल्प। इसलिए, चयन बॉक्स में मान केवल फ़ॉर्म को संपादित करते समय दिखाई देगा।आशा करता हूँ की ये काम करेगा! – Veets

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