Reputation: 2866
For some reason when a user goes to edit an entry none of the data he had inputted via .select2
is shown. The data was saved though.
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
edit.html.erb
_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
Upvotes: 10
Views: 2153
Reputation: 171
Since you are using the method grouped_collection_select for the select field, it would make more sense to pass the :selected value(s) in the options hash for select. Obviously, you can pass it as blank when you are calling the partial from new.html.erb and you can pass some value to select when you are calling the partial from edit.html.erb for editing.
E.g.
grouped_collection_select(:city, :country_id, @continents, :countries, :name, :id, :name, { :selected => [1, 5, 6 ] } )
Read more at: http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/grouped_collection_select#1538-Preselecting-options
Upvotes: 0
Reputation: 10111
This is what I do on my select2 fields
<%= 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 is how I make the text field into a select 2
$('.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
I hope that this helps you
Upvotes: 3