Ruby on Rails 并将参数执行为散列

Ruby on Rails Resque perform paramters as hash

我正在尝试编写一个 resque worker 来处理一些后台任务,例如群发电子邮件。

我希望我的工作人员接受参数哈希:

class Worker
  @queue = :worker_queue

  def self.perform(options={})
    user_id = options[:user_id]
  end
end

self.perform(arg1, arg2, arg3, arg4, arg5) 我更喜欢哪个。

控制台中一切正常(即 Worker.perform(args))。但是,每当我将其排队到 resque 时,参数都是未定义的。

ActiveRecord::RecordNotFound: Couldn't find User with 'id'=

任何人都可以指出我正确的方向吗?我知道排队的参数被序列化为 JSON。

我刚刚想了一下,我的问题是符号 :user_id 而不是 'user_id',因为它是序列化的?

是的,我的怀疑是正确的!当序列化为 JSON 时,一个 Ruby 符号变成一个常规的键字符串。

当我用 'user_id' 替换之前代码的符号后,一切都开始工作了!

是的,没错。以下代码是罪魁祸首

user_id = options[:user_id]

具体来说,在哈希 (:user_id) 中使用符号会导致问题,因为当参数为 serialized/deserialized 时,您在 Resque worker 中获得的哈希包含所有键字符串。

你应该使用:

user_id = options["user_id"]