Thank you Neal and Ben. I am in Austin for SWSX this week, and may not be able to get to extracting out the relevant pieces into a public repo until I return.
One more observation- when I run the code that I have posted here and track with debugger, when I check-in, it does get the data and it does go through the controller and does render the correct partial (check-out). But then when I actually see the page, it is still the old page with "check-in" showing. It is as if it is using a cached page. Oh well, right now let's enjoy innovation in education (that's the theme here in the edu section of SWSX). Hasta luego! On Sunday, March 2, 2014 11:18:47 PM UTC-8, Neal Clark wrote: > > Hey Ephraim, > > Can you extract out the relevant pieces into a public repo? Maybe change > model & field names? I'm sure we all could sort it out. > > -n > > > On Sun, Mar 2, 2014 at 8:59 PM, Ephraim Feig <[email protected]<javascript:> > > wrote: > >> Still not working for me. Maybe something in my settings (stretch, but >> who knows?); more than likely just lack of experience. I'll update when I >> figure this out. >> >> On Saturday, March 1, 2014 2:22:53 PM UTC-8, Benjamin Wanicur wrote: >>> >>> I'm not sure why you are using loops here, but obviously I'm seeing just >>> a small part of your application. And as for using JS to reload the page >>> or redirect (window.location), I would not recommend it unless there is not >>> another alternative. Here is the big takeaway (imho)... AJAX requests >>> will not cause a page reload or redirect etc..., so if you want that to >>> happen, consider a "normal" HTTP request. >>> >>> Another important concept is the the $(function(){ /*code in here/* }); >>> means that the JS will only execute after the page loads. This way the >>> HTML that the JS often needs to interact with is loaded before the JS tries >>> to execute. >>> >>> As you pointed out, my previous example loaded the position coords into >>> the form every time the page was loaded. I do not think that is an >>> expensive operation, but if you do not want that to happen, consider >>> another option. You can have some JS code execute only when the form is >>> submitted (when the user clicks the "CHECK IN" button. Here is a code >>> example: >>> >>> <script type="text/javascript"> >>> // This code will execute after the HTML has finished rendering (page >>> load) >>> $(function(){ >>> $('#check-in-form').submit(function(){ >>> if(navigator.geolocation){ >>> navigator.getCurrentPosition(function(position){ >>> $('#lng').val(position.coords.longitude); >>> $('#lat').val(position.coords.latitude); >>> }); >>> } >>> }); >>> }); >>> // When the form is submitted, load the values from the >>> navigator.getCurrentPosition() function into our hidden form fields >>> </script> >>> >>> <form action='/users/set_geolocation' id="check-in-form"> >>> <input type="hidden" name="latitude" id="lat" /> >>> <input type="hidden" name="longitue" id="lng" /> >>> <input type="submit" value="--> Check-In!" /> >>> </form> >>> >>> >>> On Sat, Mar 1, 2014 at 1:08 PM, Ephraim Feig <[email protected]>wrote: >>> >>>> No happy solution yet, but this is what I got so far. >>>> >>>> I have only spent a little time on the submit_tag suggestion (which I >>>> like a lot) but have not yet gotten it. That's just my ignorance of the >>>> intricacies of JQuery (oh but for more experience), but I am quite sure I >>>> will get it to pass the parameters. What concerns me with this method is >>>> that (I think) because I have to load the parameters before the submit >>>> call >>>> in order to have them ready for the form, I would have to execute >>>> navigator.geolocation ahead of time, and since I don't know when somebody >>>> will want to checkin, I would have to continually call it. I can avoid it >>>> by creating a splash page that gets called first only when one wants to >>>> checkin, and then do the submit in the splash page (not pretty). Even >>>> here, >>>> will the javascript not load the splash page? >>>> >>>> As for the link_to method, when I add window.location.reload(true), >>>> strange things happen, depending on where in the script I add it. If I add >>>> it inside the most inner loop, the server signs me off (protect from >>>> forgery works). When I put it in the outer loop, the thing not just >>>> reloads, but it keeps reloading and reloading. I find it strange, because >>>> I >>>> have it as click(function). I think that I can work around the looping, >>>> but >>>> I don't like that at all. I feel to exposed to possible bad things >>>> happening (like an infinite loop in production). >>>> >>>> So, I am still working on this. >>>> >>>> Ben, thanks for the input. >>>> >>>> >>>> On Friday, February 28, 2014 11:47:44 AM UTC-8, Ephraim Feig wrote: >>>>> >>>>> 0 down vote >>>>> favorite<http://stackoverflow.com/questions/22102460/page-does-not-update-after-navigator-geolocation-call-in-rails-check-in-check#> >>>>> >>>>> >>>>> I am using standard HTML5 location services. A user comes into a cafe, >>>>> opens the app, clicks on "Check-in!" and the app gets the location and >>>>> uses >>>>> it until the user later clicks "Check-out!". >>>>> >>>>> In my viewer, I call on a script containing navigator.geolocation and >>>>> it does its job. I successfully pass the latitude and longitude >>>>> parameters >>>>> to my controller and it updates everything. But when all is done and I >>>>> redirect_to root_url, the new page does not refresh (I know at some point >>>>> I >>>>> should do it more elegantly and just update the link part, but for now, I >>>>> just want to get this going and understand what is going on). Here is my >>>>> code: >>>>> >>>>> In my viewer- >>>>> >>>>> <% if (@voterinfo.checkin == 0) %> >>>>> <li> >>>>> <h4> <%= link_to "-->Check-In!", "#", :id => 'findMe' >>>>> %> </h4> >>>>> <script> >>>>> $(function(){ >>>>> $("a#findMe").click(function(){ >>>>> if (navigator.geolocation) { >>>>> >>>>> navigator.geolocation.getCurrentPosition(function (position) { >>>>> $.post('/users/set_geolocation/', >>>>> {latitude: position.coords.latitude, >>>>> longitude: >>>>> position.coords.longitude, >>>>> dataType: 'float'}); >>>>> }, function () { >>>>> alert('We couldn\'t find your >>>>> position.'); >>>>> }); >>>>> } else { >>>>> alert('Your browser doesn\'t support >>>>> geolocation.'); >>>>> } >>>>> }); >>>>> }) >>>>> </script> >>>>> </li> >>>>> <% else %> >>>>> <li> <h4><%= link_to "--->CHECK-OUT!", :controller => >>>>> :users, >>>>> :method => :set_geolocation >>>>> %></h4></li> >>>>> <% end %> >>>>> </ul> >>>>> <% end %> >>>>> >>>>> And here is the relevant part of my users_controller- >>>>> >>>>> def set_geolocation >>>>> @user = current_user >>>>> @voterinfo = Voterinfo.find_by_user_id(@user.id) >>>>> if (@voterinfo.checkin == 0) >>>>> @user.update_attributes(:longitude => params['longitude'], :latitude >>>>> => params[:latitude]) >>>>> @user.save(validate: false) >>>>> sign_in(@user) >>>>> @voterinfo.checkin = 1 >>>>> @voterinfo.save >>>>> redirect_to root_url >>>>> else >>>>> @voterinfo.checkin = 0 >>>>> @voterinfo.save >>>>> redirect_to root_url >>>>> end >>>>> >>>>> end >>>>> >>>>> Thank you for any help here. >>>>> >>>>> >>>>> -- >>>> -- >>>> SD Ruby mailing list >>>> [email protected] >>>> http://groups.google.com/group/sdruby >>>> --- >>>> You received this message because you are subscribed to the Google >>>> Groups "SD Ruby" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to [email protected]. >>>> For more options, visit https://groups.google.com/groups/opt_out. >>>> >>> >>> -- >> -- >> SD Ruby mailing list >> [email protected] <javascript:> >> http://groups.google.com/group/sdruby >> --- >> You received this message because you are subscribed to the Google Groups >> "SD Ruby" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected] <javascript:>. >> For more options, visit https://groups.google.com/groups/opt_out. >> > > -- -- SD Ruby mailing list [email protected] http://groups.google.com/group/sdruby --- You received this message because you are subscribed to the Google Groups "SD Ruby" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/groups/opt_out.
