Ruby on rails 购买Rails中的计时器
我希望创建一个类似Ticketmaster上的购买计时器,在订单回滚之前,您有x分钟的时间支付订单 不过,我不太清楚该怎么做。在有人提出这些建议后,查看了gem和railscast,它的功能似乎有所不同——延迟作业允许您延迟一项操作,但不会使延迟取决于其他任何事情的发生,我不知道如何做到这一点 我基本上是在寻找能让我 a) 有这样的(伪)代码吗Ruby on rails 购买Rails中的计时器,ruby-on-rails,ruby-on-rails-3,delayed-job,Ruby On Rails,Ruby On Rails 3,Delayed Job,我希望创建一个类似Ticketmaster上的购买计时器,在订单回滚之前,您有x分钟的时间支付订单 不过,我不太清楚该怎么做。在有人提出这些建议后,查看了gem和railscast,它的功能似乎有所不同——延迟作业允许您延迟一项操作,但不会使延迟取决于其他任何事情的发生,我不知道如何做到这一点 我基本上是在寻找能让我 a) 有这样的(伪)代码吗 if job_timer == 0 @order.destroy #Some redirect/flash stuff end b) 在页
if job_timer == 0
@order.destroy
#Some redirect/flash stuff
end
b) 在页面上显示计时器(即,“在您的订单被撤销之前,您还有3分25秒要支付。”)
有什么主意做什么/去哪里看吗
谢谢
萨沙你要找的就是这份工作 例如,您可以拥有一个遍历所有order对象的函数
def清除命令
#purge_at是order的一个属性,包含
#应删除订单的日期时间。
Order.where(“purge_at>={DateTime.current}”)。每个{Order | Order.destroy}
结束
第二个问题更像是一个javascript问题。其思想是,Rails将剩余时间传递给客户端,javascript使用Rails端提供的剩余时间创建计时器。将javascript放在视图文件中。理想情况下,您应该在资产文件夹中隔离javascript,但我不会在这里为您这样做
<script language="JavaScript">
TargetDate = <%= @order.purge_at - DateTime.current %>;
BackColor = "palegreen";
ForeColor = "navy";
CountActive = true;
CountStepper = -1;
LeadingZero = true;
DisplayFormat = "%%D%% Days, %%H%% Hours, %%M%% Minutes, %%S%% Seconds.";
FinishMessage = "It is finally here!";
</script>
<script language="JavaScript" src="http://scripts.hashemian.com/js/countdown.js"></script>
TargetDate=;
BackColor=“淡绿色”;
ForeColor=“海军”;
CountActive=true;
CountStepper=-1;
前导零=真;
DisplayFormat=“%%D%%天、%%H%%小时、%%M%%分钟、%%S%%秒。”;
FinishMessage=“终于到了!”;
延迟的工作是你想要的 例如,您可以拥有一个遍历所有order对象的函数
def清除命令
#purge_at是order的一个属性,包含
#应删除订单的日期时间。
Order.where(“purge_at>={DateTime.current}”)。每个{Order | Order.destroy}
结束
第二个问题更像是一个javascript问题。其思想是,Rails将剩余时间传递给客户端,javascript使用Rails端提供的剩余时间创建计时器。将javascript放在视图文件中。理想情况下,您应该在资产文件夹中隔离javascript,但我不会在这里为您这样做
<script language="JavaScript">
TargetDate = <%= @order.purge_at - DateTime.current %>;
BackColor = "palegreen";
ForeColor = "navy";
CountActive = true;
CountStepper = -1;
LeadingZero = true;
DisplayFormat = "%%D%% Days, %%H%% Hours, %%M%% Minutes, %%S%% Seconds.";
FinishMessage = "It is finally here!";
</script>
<script language="JavaScript" src="http://scripts.hashemian.com/js/countdown.js"></script>
TargetDate=;
BackColor=“淡绿色”;
ForeColor=“海军”;
CountActive=true;
CountStepper=-1;
前导零=真;
DisplayFormat=“%%D%%天、%%H%%小时、%%M%%分钟、%%S%%秒。”;
FinishMessage=“终于到了!”;
虽然延迟的工作可能可以解决这个问题,但它并不像前面的答案所说的那么简单 我想会是这样的: order.rb:
after_create :schedule_check_payment
def schedule_check_payment
self.delay(:run_at => 5.minutes.from_now, :queue => :payment_checks).check_payment
end
def check_payment
self.reload
unless payment_exists #check if the user has paid
self.destroy
end
end
我还可以想到一些关于这项技术的注意事项:
虽然延迟的工作可能可以解决这个问题,但它并不像前面的答案所说的那么简单 我想会是这样的: order.rb:
after_create :schedule_check_payment
def schedule_check_payment
self.delay(:run_at => 5.minutes.from_now, :queue => :payment_checks).check_payment
end
def check_payment
self.reload
unless payment_exists #check if the user has paid
self.destroy
end
end
我还可以想到一些关于这项技术的注意事项:
令人惊叹的。非常感谢你。因此,我可能应该创建一个函数,在第一次创建相关订单实例时,同时在该实例上启动一个delay_作业,并为purge_赋值。所以在模型中,在一个后创建调用或其他什么。然后把这个清除订单的方法也放到我的订单模型中?并在页面上使用计时器调用它?当用户提交订单时,您可以使
purge\u at=created\u at+3天
以便订单在3天后销毁。将延迟作业设置为每5分钟或其他时间运行一次,它将检查订单并删除当时通过清除的所有订单。如果用户必须支付的时间以天为单位,则该操作相当有效。如果更像是几分钟,那么获得准确的结果需要