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.

Reply via email to