2015-12-15 15 views
9

Per qualche motivo quando un utente va a modificare una voce, nessuno dei dati che ha immesso tramite .select2 viene mostrato. I dati sono stati però salvati.select2 non salvare l'input per Modifica

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

Hai provato 'selezionato: f.object.something'? –

+0

Stai reimpostando il valore select2 dopo aver inviato correttamente? – xkcd149

+0

Se tocchi il salvataggio sul modulo di modifica, esso ripristinerà qualsiasi valore a meno che non riporti il ​​valore in @ xkcd149 –

risposta

3

Questo è quello che faccio sul mio campi 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 è come io faccio il campo di testo in un select 2

caffè

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

Spero che questo ti aiuta

+0

qui sto lottando con il tuo codice. Non c'è modo di farlo con 'grouped_collection_select'? –

+0

quello che faccio è che ho un campo di testo normale che quindi seleziona2 lo rende in un campo di selezione. Quello che è importante sapere è che io uso una classe chiamata 'json_data' su cui jquery esegue un'azione. Quando si usa select2 mi piace includere un campo nascosto con lo stesso nome del campo che voglio usare select2 solo nel caso di valori nulli. ma è importante sapere che i dati per popolare le valute provengono dall'URL ajax – MZaragoza

0

Dal momento che si sta utilizzando il metodo grouped_collection_select per il campo di selezione, che avrebbe più senso per passare il: valore selezionato (s) nella hash opzioni per selezionare. Ovviamente, puoi passarlo come vuoto quando chiami il partial da new.html.erb e puoi passare qualche valore da selezionare quando stai chiamando il partial da edit.html.erb per la modifica.
E.g.
grouped_collection_select(:city, :country_id, @continents, :countries, :name, :id, :name, { :selected => [1, 5, 6 ] })

saperne di più su: http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/grouped_collection_select#1538-Preselecting-options

+0

Certo, quindi imposta il: selezionato sui valori desiderati quando esegui il rendering del modulo per la modifica, altrimenti lascia vuoto l'array: selezionato. – Veets

+0

Poiché si sta utilizzando un modulo parziale, è possibile passare una variabile con i valori per: opzione selezionata. Durante la chiamata del modulo partial da new.html.erb, invia questa variabile come [] e mentre chiama il partial del modulo da edit.html.erb passa questa variabile come [some_value] per: opzione selezionata. Pertanto, il valore nella casella di selezione verrà visualizzato solo durante la modifica del modulo. – Veets

Problemi correlati