Rails: 带回调的倒数计时器

Rails: Countdown timer with callback

您好,我正在尝试实现倒数计时器,我的应用程序中有一个 "oferts" 模型,您可以设置它可用的时间以及倒计时播放的位置。

经过大量研究,我发现了这个 Gem,它的效果非常好,但我遇到了一个问题,倒计时到达 cero 时如何获取事件?

我的意思是,我的 "oferts" 模型有一个布尔属性 "active",我想在倒计时结束时将属性 "active" 更改为 false

你会怎么做?有什么建议吗? gem 我使用的是正确的吗?

感谢您的帮助

伟大的我们 grupoly 实现了您所描述的这样一个系统。

但是你想错了,我会为任何需要这个的人提供解决方案。

首先,我会像这样在 oferts 模型中创建一个范围:

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

所以我假设你有一个名为 ends_at 的属性,所以我们得到所有的 ends_at 小于当前时间的 oferts,这意味着所有的 oferts 都过期了。

然后你只需要创建一个 rake 任务来停用所有那些已经过期的 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,你可以每分钟 运行 这个抽取任务,例如使用 gem 喜欢每当 gem

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

现在如果你需要实时显示倒计时,你可以使用像jQueryCountDown这样的jQuery插件,我想有一个gem可以用于资产管道,您只需按照那里的说明操作即可。

我想让你明白,倒计时只是 "visual" 这意味着它只针对用户,它是一个只对客户端有意义的计时器,在后端你有你的抽佣任务运行每分钟寻找过期的 oferts 并停用它们。

我不会向您提供有关如何显示计时器的详细信息,因为那只是 jQuery 东西。

希望对大家有所帮助。