2013-03-23 2 views
0

У меня есть задачи, которые мои пользователи проходят и заканчивают один за другим и записывают результат. В зависимости от результата задача может быть приостановлена ​​для «х» числа дней, а затем после «х» дней она снова становится доступной. Иногда он возвращается в очередь задач для ТОЛЬКО «y» дней, а затем истекает (task.active = 0)Обновить запись в 'x' дня?

Каков наилучший способ достичь этой функции с помощью Rails 3? Я использую Postgre.

ответ

2

Сделать атрибут модели inactive_until, который является либо нулевым, либо датой в будущем. Затем добавить область к вашей модели, active, который просто проверяет, если это поле nil или < Time.now

Теперь, чтобы сделать кого-то неактивно в течение определенного периода времени, установите inactive_until на дату в будущем.

+0

Для более эффективных и читаемых запросов можно сделать 'active_until' поле' NOT NULL' и использовать далекую будущую дату. Если Rails и Pg gem поддерживают бесконечные даты, используйте '+ infinity' как дату; в противном случае используйте самую большую дату Rail и Pg gem. Это имеет смысл только в том случае, если значительная часть ваших записей имеет ненулевое поле 'active_until'; если только меньшая фракция имеет набор 'active_until', вы можете использовать' null' для неустановленных и создать частичный индекс на '(active_until) WHERE (active_until IS NOT NULL)' –

Смежные вопросы