Ситуация:
Журнал принимает заявки.После того, как вы отправите заявку, редактор запланирует вашу отправку на проверку.После того, как он был просмотрен, вы больше не можете его редактировать.
Итак, у меня есть представление в разных штатах.«Черновик», «в очереди», «проверено» и т. Д. Большинство переключений в эти различные состояния инициируются каким-либо действием, например, отправка ставится в очередь, когда редактор ее планирует.Легко, пизи.Однако переход в состояние «проверено» не инициируется каким-либо действием, он просто происходит после того, как прошло определенное время.
У меня есть две мысли о том, как этого добиться:
- Запустите ежедневное / почасовое задание cron, чтобы проверить все отправленные в очередь заявки и переключить их на просмотренные, если это необходимо.Мне это не нравится, потому что
- Я бы предпочел, чтобы это было ежечасно, чтобы я мог редактировать свое представление не позднее, чем за три часа до начала собрания
- Почасовые хронологические задания на Heroku стоят денеглибо никогда не будет зарабатывать деньги, либо не будет зарабатывать деньги в течение нескольких месяцев и месяцев
- Каким-то образом создаст обратный вызов
before_load
ActiveRecord, который будет выполнять некоторую логику для представлений при каждой их загрузке,«В очереди? Нет? Не имеет значения. В противном случае переключите его на« Отзыв », если до его собрания менее трех часов».
Я хотел бы узнать мнение людей по второй идее.
- Это ужасно вонючий способ сделать это?
- Если да, можете ли вы предложить удивительный третий способ?
- Если «нет» обоимвыше, можете ли вы дать советы о том, как выполнять такую логику каждый раз, когда запись загружается из базы данных?Мне нужно всегда выполнять некоторую логику, прежде чем делать
select
из таблицы submissions
(которая готовится стать самой запрашиваемой таблицей в приложении ...)
Если естьнет хорошего способа выполнить второй вариант (или, я надеюсь! третий вариант), я прибегну к варианту один с ежедневной работой cron.Возможность редактирования за день до собрания будет достаточной.