Hello,
I have a weird problem that seems way over my skill level so could use
even some simple suggestions to point me in the right direction.
I have a set of 6 chained dropdown menus that work fine on my computer,
but do not retain the correct selections if I make the menu selections
too quickly on the Heroku server.
Each time a selection is made from a dropdown, the session data is
updated with the following jQuery/ Ajax:
# If BOOK dropdown clicked on.
chapters = $('#chapters').html()
$('#books').change ->
book = $('#books :selected').text()
book_id = $('#books :selected').val()
escaped_book = book.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g,
‘\$1’)
options =
$(chapters).filter(“optgroup[label=’#{escaped_book}’]”).html()
options = options.replace(‘selected=“selected”’, “”)
options = (‘Select a Chapter’ + options)
$.ajax(
url: ‘/dropdowns/update_image_book’,
data: “image_book_id=” + book_id)
if options
$(’#chapters’).html(options)
$(’#chapters’).prop(‘disabled’, false)
$(’#sections’).html(‘Select a
Section’)
$(’#sections’).prop(‘disabled’, true)
$(’#subsections’).html(‘Select a
Subsection’)
$(’#subsections’).prop(‘disabled’, true)
$(’#minisections’).html(‘Select a
Topic’)
$(’#minisections’).prop(‘disabled’, true)
else
$(’#chapters’).empty()
Here is controller:
def update_image_book
session[:image_book_id] = params[:image_book_id]
session[:image_chapter_id] = “”
session[:image_section_id] = “”
session[:image_subsection_id] = “”
session[:image_minisection_id] = “”
redirect_to pictures_path
end
And the view:
<%= select_tag :books,
option_groups_from_collection_for_select(Subject.order(:title), :books,
:title, :id, :title, get_id_from_session(:book)), :prompt => “Select a
Book”, :disabled => true %>
After looking at the heroku logs, it looks like if I make the selections
too quickly, the most recent selection runs before the line
2013-12-16T15:54:23.707522+00:00 heroku[router]: at=info method=GET
path=/dropdowns/update_image_book?image_book_id=3
host=…herokuapp.com fwd=“75.118.31.205” dyno=web.1
connect=13ms service=32ms status=302 bytes=113
has a chance to run.
Is this possible, and if so is there a better way to do this?
Dave.