Hey all, i want to execute a action (located in lib) every 5 minutes. For now i use periodically_call_remote. But every time i navigate on my site, the countdown is reseting to zero and starts again. I want a countdown which is counting autonomus and starts if the user logged in. Thanks for your help! -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Hi Stephan, I am not too sure where exactly you are trying to execute this time based procedure. It can be done on several different levels, each of which would result in a different solution. However, from the following statement I will assume that you might be wanting to perform some duties on the model level: "I want a countdown which is counting autonomus and starts if the user logged in." Say that you are simply wanting to save an active record object every 5 minutes after the user has logged in. If the lifespan of an active record object will be persistent throughout a user''s session, which I would NOT advise, there is a really neat gem called the rufus scheduler that might do the trick. http://rufus.rubyforge.org/rufus-scheduler/ You could use it in your model like so: class Fish < ActiveRecord::Base require ''rubygems'' require ''rufus/scheduler'' SCHEDULER = Rufus::Scheduler.start_new def initialize super SCHEDULER.every "5m" do #might want to consider the fact that this object could be in a state where it can''t save due to validation constraints self.save end end end Otherwise, you could simply check the "updated_at" timestamp for the active record in the controller and run some code every 5 minutes (current_time - updated_at > 5 minutes). Of course the drawback here is that it is completely contingent upon the user making requests to the server. HTH, Aldo Sarmiento -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
> Otherwise, you could simply check the "updated_at" timestamp for the > active record in the controller and run some code every 5 minutes > (current_time - updated_at > 5 minutes). Of course the drawback here is > that it is completely contingent upon the user making requests to the > server.Hey Aldo, i ll try it with your controller solution, sounds great! So my last problem is how can i display the user the countdown? As i wrote i do it with some javascript countdown, but everytime the user navigate on my site the countdown is reset. Thanks a lot! -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Ok i think i know what you are doing now. I would suggest writing something like this in your ./lib directory (named timer.rb in this case): class Timer @end_time attr_writer :time def initialize(end_time) @end_time = end_time end def time_remaining @end_time - Time.now end def time_up? time_remaining <= 0 end end Of course this is really rough, and there are no date conversions from milliseconds to other increments. However it is a good starting point. Now you can simply create a session that holds an instance of the timer object. Something like this in your controller: def authorize #your authorization code session[:timer] = Timer.new(Time.now + 5.minutes) end Then you can use this session in your views to set the countdown times in javascript: <% javascript_tag do -%> function show_timer(){ var start_time = <%= session[:timer].time_remaining %>; //rest of your display code here } <% end -%> This way, you will be able to access the time across posts! HTH, Aldo Sarmiento -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Thanks a lot, sound like the perfect solution for me :) -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---