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"]
我正在尝试编写一个 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"]