我正在创建一个Rails应用程序,让用户预订活动门票。
一旦用户选择了他想要购买的机票,他就有15分钟的时间来完成结账,否则机票将被释放并且可以由其他人预订。
我怎样才能“阻止”15分钟并在15分钟后再次使用?
答案 0 :(得分:1)
在故障单模型(或您正在使用的任何模型)中有一个状态字段,并在用户选择时将其标记为partially_booked。
如果您正在使用延迟工作,
handle_asynchronously :your_method_here, :run_at => Proc.new { 15.minutes.from_now }
如果您使用的是sidekiq,
YourWorker.perform_in(15.minutes, ticket_id)
其中' your_method_here'或者' YourWorker'将包含检查预订是否已完成的逻辑,如果未完成则将其标记为未分配。
答案 1 :(得分:1)
ActiveJob
有助于在后台完成工作。使用ActiveJob
,您可以为延迟的操作生成作业,并将它们排入队列以便以后执行。您可以在模型中添加一个布尔字段,如reserved
,并在用户首次保留并运行后台作业时将其设置为true,以便在15分钟后用户无法完成购买,请将其设置为为假:
TicketJob.set(wait_until: 15.minutes.from_now).perform_later(@ticket)
Active Job是一个框架,用于声明作业并使它们在各种排队后端上运行。要设置ActiveJob
的后端,请查看DelayedJob。它简单而且足够好。