Как установить продолжительность для моего объекта Product
? Таким образом, когда продукт создается пользователем, он устанавливает счетчик JS в 1 day
, а затем уничтожает/инактивирует @product
, когда часы заканчиваются.продолжительность объекта ruby on rails
Я знаю, как запустить это асинхронно, используя Sidekiq. Дело в том, что я не знаю, как заставить рубин работать с обратным отсчетом JS рабочего клиента. И как сказать Rails, что каждый раз, когда продукт создается, у него будет период 1 день (возможно, обратный вызов?).
def end_time
self.destroy in 1.days
self.update_attribute(:end_time, Time.now)
end
EDIT:
Он выдает ошибку для просмотра.
Illegal nesting: content can't be both given on the same line as %div and nested within it.
Вот модель.
#countdown{"data-created-at" => @product.created_at}
%digits
%span.days
%pcd DAYS
%digits
%span.hours
%pcd HRS
%digits
%span.minutes
%pcd MINS
%digits
%span.seconds
%pcd SECS
products.js
function getTimeRemaining(endtime){
var t = Date.parse(endtime) - Date.parse(new Date());
var seconds = Math.floor((t/1000) % 60);
var minutes = Math.floor((t/1000/60) % 60);
var hours = Math.floor((t/(1000*60*60)) % 24);
var days = Math.floor(t/(1000*60*60*24));
return {
'total': t,
'days': days,
'hours': hours,
'minutes': minutes,
'seconds': seconds
};
}
function initializeClock(id, endtime){
var clock = document.getElementById(id);
var daysSpan = clock.querySelector('.days');
var hoursSpan = clock.querySelector('.hours');
var minutesSpan = clock.querySelector('.minutes');
var secondsSpan = clock.querySelector('.seconds');
function updateClock(){
var t = getTimeRemaining(endtime);
daysSpan.innerHTML = t.days;
hoursSpan.innerHTML = ('0' + t.hours).slice(-2);
minutesSpan.innerHTML = ('0' + t.minutes).slice(-2);
secondsSpan.innerHTML = ('0' + t.seconds).slice(-2);
if(t.total<=0){
clearInterval(timeInterval);
}
}
updateClock();
var timeInterval = setInterval(updateClock,1000);
}
var deadline = 'December 15 2015 00:00:50 UTC+0200';
initializeClock('countdown', deadline);
Try для использования планировщика. –
Вы можете использовать cronjob для удаления записи через 1 день. Просто установите end_time в базе данных и запустите фоновое задание, чтобы проверить, есть ли какой-либо продукт, который достиг конечного_time, и затем удалить этот продукт. –
Нет проблем. Я знаю, как запустить это асинхронно, используя Sidekiq. Дело в том, что я не знаю, как заставить рубин работать с обратным отсчетом JS рабочего клиента. И как сказать Rails, что каждый раз, когда продукт создается, у него будет период 1 день (возможно, обратный вызов?). – Liroy