2015-02-05 3 views
0

Привет, я пытаюсь реализовать таймер обратного отсчета, у меня есть модель «oferts» в моем приложении, вы можете установить время, когда оно будет доступно, и там, где идет обратный отсчет.Rails: таймер обратного отсчета с обратным вызовом

После много исследований я нашел это , он работает как шарм, но Im сталкивается с проблемой, как мне получить событие, когда обратный отсчет достигает нуля?

Я имею в виду, моя модель «oferts» имеет логический атрибут «активный», я хочу, когда отсчет заканчивается изменить атрибут «активный» в ложном

как бы вы это сделать? любой совет? это драгоценный камень Im, который использует правильный?

Спасибо за вашу помощь

+0

вместо столбца 'active', почему бы не просто иметь какой-то столбец' end_date', который содержит временную метку того, что он недействителен? –

+0

Показать минимальный код. Код стоит больше, чем описание, где мы должны представить, что вы сделали. –

ответ

1

Великого мы в grupoly реализована такая система, что вы описываете.

Но вы думаете, что это неправильно, я приведу решение для всех, кому это нужно.

Прежде всего я хотел бы создать область в модели oferts, как это:

#ofert.rb  
scope :are_ready_to_inactive, -> { 
     where(active: true).where('ends_at <= ?', Time.zone.now) 
    } 

Так я supose у вас есть атрибут называется ends_at таким образом мы получаем все oferts, что их ends_at меньше, чем текущее время , это означает, что все оверты, которые истекли.

Тогда вам просто нужно создать реки задачу для инактивации всех тех oferts, которые истекли:

#lib/tasks/oferts.rake 
namespace :oferts do 
    desc "Inactive oferts with cron on certain time" 
    task inactivatethem: :environment do 
     Ofert.are_ready_to_inactive.find_each do |ofert| 
      ofert.update_attributes active: false 
     end 
    end 
end 

Великой теперь, если вы запустите в консоли rake oferts:inactivatethem вы инактивируете все oferts, которые уже истекли, вы можете делают запустить эти грабли задачу каждую минуту, например, используя драгоценный камень, как всякий раз, когда драгоценный камень

#config/schedule.rb 
every 1.minute do 
    rake 'oferts:inactivatethem' 
end 

Теперь, если вам нужно отобразить обратный отсчет в реальном времени, вы можете использовать плагин JQuery, как jQueryCountDown, я думаю, что есть камень готов для ассе t, вам просто нужно следовать инструкциям.

Я хочу, чтобы вы поняли, что обратный отсчет является только «визуальным», это означает, что он предназначен только для пользователя, это таймер, который имеет только смысл на клиенте, в бэкэнд у вас есть своя задача, которая запускается каждую минуту для аортов, которые истекли и инактивировали их.

Я не дам вам подробностей о том, как показать таймер, потому что это просто материал jQuery.

Я надеюсь, что это поможет кому угодно.

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