Search code examples
ruby-on-railsauto-updateduration

Update database after duration (Ruby on Rails)


I have a cycle model with two fields: duration (string) and completed (boolean). When a user creates a cycle, they enter the duration (lets say 30 minutes) and the cycle is set to not complete (boolean 0). How do I update that database entry after the cycle duration (30 minutes) to mark the cycle as complete (boolean 1)? Is there a way to handle this with ruby/rails code, or do I have to execute a javascript function?

The goal is to be able to find and display all completed cycles using Cycle.all(:conditions..) and call the SQL database. I wrote a "complete?" method in the cycle model that compares the age of the cycle to the duration, but this is useless for SQL find methods.

What's the best way to tackle this? Thanks!


Solution

  • Define a rake task that runs something like…

    desc "Expire old cycles"
    task :cron => :environment do
      expired = Cycle.all :conditions => ["expiration < ?", DateTime.now]
      expired.each { |c| c.expire! }
    end
    

    Where c#expire! is a method that'll mark it as expired in the database. Then setup rake cron to run every N minutes via a cronjob.

    If you're comfortable doing this in SQL, you can optimize this by writing a query to do UPDATE cycles SET complete = 1 WHERE expiration < NOW();.