Fre*_*ins 0 jobs ruby-on-rails task
我正在创建一个 Rails 应用程序,让用户可以预订活动的门票。
一旦用户选择了他想要购买的车票,他有 15 分钟的时间完成结账,否则车票将被释放并可供其他人预订。
如何“阻止”票证 15 分钟并在 15 分钟后使其再次可用?
在您的票证模型(或您使用的任何模型)中有一个状态字段,并在用户选择它时将其标记为 partial_booked。
如果您使用延迟作业,
handle_asynchronously :your_method_here, :run_at => Proc.new { 15.minutes.from_now }
Run Code Online (Sandbox Code Playgroud)
如果您使用 sidekiq,
YourWorker.perform_in(15.minutes, ticket_id)
Run Code Online (Sandbox Code Playgroud)
其中“your_method_here”或“YourWorker”将包含检查预订是否完成的逻辑,如果未完成则将其标记为未分配。
ActiveJob帮助在后台完成工作。使用ActiveJob您可以为延迟的操作生成作业并将其排队以供以后执行。您可以向模型中添加一个布尔字段,例如,reserved当用户首次保留它时将其设置为 true 并运行后台作业,以便如果 15 分钟后用户无法完成购买,请将其设置回 false:
TicketJob.set(wait_until: 15.minutes.from_now).perform_later(@ticket)
Run Code Online (Sandbox Code Playgroud)
Active Job 是一个用于声明作业并使它们在各种队列后端上运行的框架。要设置后端ActiveJob,请查看DelayedJob。它很简单而且足够好。
| 归档时间: |
|
| 查看次数: |
2563 次 |
| 最近记录: |