[我正在尝试让我的系统通过控制器中的'destroy'方法在删除相关计划的sidekiq任务时自动删除其相关对象。
有问题的任务是添加到sidekiq“计划的”队列中的“动作邮件程序”。在特定时刻,我需要检查所有这些任务,并将参数与模型ID进行比较。
为此,我填充了一系列计划任务,并对其进行迭代;
scheduled_queue = Sidekiq::ScheduledSet.new
scheduled_queue.each do |job|
condition = true if job.args[0] == @object.id
end
但是我无法将参数转换为任何可比较的形式。所有参数似乎都存在于job.args数组的[0]中。
<%= job.args.size %> #Returns 1
<%= job.args.first %> #Returns below
---
job_class: ActionMailer::DeliveryJob
job_id: 28c966f3-3fbd-4963-a9cc-64e609803246
provider_job_id:
queue_name: mailers
priority:
arguments:
- ResponseMailer
- reminder_email
- deliver_now
- 29
- Third reminder
- 9095
executions: 0
locale: en
<%= job.args.first.class %> #Returns !ruby/class 'Hash'
显然这是一个哈希,但是job.args.first.keys
引发错误。
9的未定义方法`keys':整数
如何将变量与邮件程序参数进行比较?
设法找到用于访问特定参数(x)的代码;
job.args.first['arguments'].[x]
未定义的方法'keys'错误是由计划队列中格式不同的任务引起的。我的错误是要遍历队列中的每个任务,而不是过滤掉无关的任务。