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]> 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]<javascript:> >> > 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] <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. -- -- 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.
