2015-12-15 15 views
9

Z jakiegoś powodu, gdy użytkownik przechodzi do edycji wpisu, żaden z danych wprowadzonych przez .select2 nie jest wyświetlany. Dane zostały zapisane.select2 nie zapisywanie danych wejściowych do edycji

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

próbowałaś 'wybrany: f.object.something'? –

+0

Czy resetujesz wartość select2 po pomyślnym przesłaniu? – xkcd149

+0

Jeśli uderzę zapisać na formularzu edycji, to zresetuje cokolwiek, jeśli wartość nie została umieszczona ponownie w @ xkcd149 –

Odpowiedz

3

To, co robię na moich polach select2

<%= 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 sposób uczynić pole tekstowe do wybranej 2

kawa

$('.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 

Mam nadzieję, że to pomaga

+0

Tutaj walczę z twoim kodem. Czy nie można tego zrobić za pomocą 'grouped_collection_select'? –

+0

to, co robię, to mam zwykłe pole tekstowe, które następnie wybiera2 do pola wyboru. Ważne jest, aby używać klasy zwanej 'json_data', na której jQuery wykonuje akcję. Korzystając z select2, chciałbym dodać ukryte pole o takiej samej nazwie jak pole, które chcę użyć select2 na właśnie w przypadku zerowej wartości. ale ważne jest, aby wiedzieć, że dane do wypełnienia wartością pola pochodzą z adresu url ajaxowego – MZaragoza

0

Ponieważ używasz grouped_collection_select metoda polu wybierz, czy miałoby to więcej sensu, aby przejść: Wybrana wartość (y) w hash opcji dla wybranych. Oczywiście, możesz przekazać to puste, gdy wywołujesz częściowe z new.html.erb i możesz przekazać jakąś wartość, aby wybrać, kiedy wywołujesz częściowe z edit.html.erb do edycji.
E.g.
grouped_collection_select(:city, :country_id, @continents, :countries, :name, :id, :name, { :selected => [1, 5, 6 ] })

Czytaj więcej na: http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/grouped_collection_select#1538-Preselecting-options

+0

Oczywiście, a następnie ustaw: selected na wartości, które chcesz podać podczas renderowania formularza do edycji, w przeciwnym razie pozostaw: wybraną tablicę pustą. – Veets

+0

Ponieważ używasz formularza częściowego, możesz przekazać zmienną z wartościami dla: wybranej opcji. Podczas wywoływania formularza częściowego z new.html.erb, wyślij tę zmienną jako [] i podczas wywoływania formularza częściowego z edit.html.erb przekaż tę zmienną jako [some_value] dla: wybranej opcji. Dlatego wartość w polu wyboru pojawi się tylko podczas edytowania formularza.Mam nadzieję, że to pomoże! – Veets

Powiązane problemy