Установить атрибут модели в фоновом режиме, основываясь на другом атрибуте? - PullRequest
0 голосов
/ 24 декабря 2008

У меня есть модель аукциона с несколькими атрибутами, два из которых current_auction: логическое и schedule_start: datetime . Как я могу сделать логическое значение (по умолчанию false) истинным, когда schedule_start становится текущим временем? Пожалуйста, скажите мне, если вам нужна дополнительная информация. Я предполагаю, что мне нужно будет использовать скрипт / бегун, но у меня нет опыта работы с ним.

Ответы [ 2 ]

0 голосов
/ 24 декабря 2008

Скорее всего, вы вообще не хотите этого в базе данных, как говорит tvanfosson.

Но если вам это нужно в базе данных (скажем, вам нужно выполнить поиск по Sphinx), вам, вероятно, понадобится триггер базы данных. Для получения дополнительной информации см. Справочник по MySQL 5.0 (предполагается, что вы используете MySQL).

Для вещей, которые требуют более сложной логики, я бы настроил систему очередей и добавил сообщение в очередь для обновления этого атрибута в хуке after_save. Таким образом, оно будет запускать обновление, но на самом деле не будет ждать его завершения, прежде чем вернуться к пользователю. У меня был вопрос об асинхронных очередях , и я в итоге использовал Starling и Workling.

0 голосов
/ 24 декабря 2008

Я бы не стал хранить current_auction как свойство. Current_auction - это скорее состояние, которое зависит от времени schedule_start и текущего времени. Не помещайте его в базу данных, а добавьте его как метод в вашу модель, который сравнивает запланированный запуск с текущим временем и возвращает истину / ложь на основе расчета.

Если вам нужно выбрать в зависимости от того, является ли он текущим или нет, используйте логику выбора, которая зависит от времени запланированного запуска, а не от текущего / не текущего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...