Обновление базы данных после продолжительности (Ruby on Rails) - PullRequest
0 голосов
/ 19 января 2011

У меня есть модель цикла с двумя полями: длительность (строка) и завершенная (логическое значение).Когда пользователь создает цикл, он вводит продолжительность (скажем, 30 минут), и цикл устанавливается как не завершенный (логическое значение 0).Как обновить эту запись базы данных после продолжительности цикла (30 минут), чтобы пометить цикл как завершенный (логическое значение 1)?Есть ли способ справиться с этим с помощью кода ruby ​​/ rails или мне нужно выполнить функцию javascript?

Цель состоит в том, чтобы иметь возможность находить и отображать все завершенные циклы, используя Cycle.all (: условия..) и вызвать базу данных SQL.Я написал "полный?"метод в модели цикла, который сравнивает возраст цикла с длительностью, но это бесполезно для методов поиска SQL.

Какой лучший способ справиться с этим?Спасибо!

1 Ответ

2 голосов
/ 19 января 2011

Определите грабли, которые запускают что-то вроде ...

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

Где c#expire! - метод, который помечает его как устаревший в базе данных. Затем настройте rake cron для запуска каждые N минут с помощью cronjob.

Если вам удобно делать это в SQL, вы можете оптимизировать это, написав запрос для UPDATE cycles SET complete = 1 WHERE expiration < NOW();.

...