Hi Ephraim You are issuing an AJAX call to your UsersController. This cannot redirect the page directly. You could (I would not recommend this) have a success callback in your jQuery method that uses the window.location = "/some_url_here" and that would redirect your browser.
Perhaps a better approach (if you want the page to redirect) is create a form with a few hidden form fields (for your geolocation data). The submit button on the form could trigger your JS function and then submit (not AJAX call) to your UsersController#set_geolocation method. This would be a plain-old HTTP request (POST request) and it will follow the Rails redirect_to method. Cheers Ben W On Fri, Feb 28, 2014 at 11:47 AM, Ephraim Feig <[email protected]>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] 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.
