Ruby on rails 创建新的数据库记录,然后将id发送到Resque返回nil(找不到id)

Ruby on rails 创建新的数据库记录,然后将id发送到Resque返回nil(找不到id),ruby-on-rails,mongoid,resque,Ruby On Rails,Mongoid,Resque,我有一个用户对象,我从twitter/facebook获取用户数据,然后点击save,最后将用户id和化身url发送到Resque.enqueue self.save! Resque.enqueue(AvatarPull, {user_id: self.id, url: user[:avatar] }) if user[:avatar] and self.avatar.blank? 然后在self.perform中,我只需使用find按id获取用户,然后设置化身,然后保存 @queue =

我有一个用户对象,我从twitter/facebook获取用户数据,然后点击save,最后将
用户id
化身url
发送到
Resque.enqueue

self.save!

Resque.enqueue(AvatarPull, {user_id: self.id, url: user[:avatar] }) if user[:avatar] and self.avatar.blank?
然后在
self.perform
中,我只需使用find按id获取用户,然后设置化身,然后保存

@queue = :paperclip

def self.perform(options={})

    user = User.find(options[:user_id])
    user.avatar = URI.parse(options[:url].sub("_normal", ""))
    user.save!
end
问题是我因为没有按id查找用户而出现此错误

(Job{paperclip} | AvatarPull | [{"user_id"=>"51191a5e0eae9cfccf000006", "url"=>"http://source"}]) failed: #<Mongoid::Errors::InvalidFind: 

Problem:
Calling Document.find with nil is invalid.

Summary:
Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.

Resolution:
Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.>
(作业{回形针}|虚拟图片|[{“用户id”=>“51191A5E0EAE9CFCFC000006”,“url”=>”http://source“}”)失败:#

我认为这是因为进入队列所需的时间少于将记录保存到数据库中所需的时间。是否有办法解决此问题,可能会增加延迟,或者还有其他问题?

重新创建作业存储为JSON包。这意味着传递给perform方法的选项散列现在具有字符串而不是符号的键。请注意错误中“user_id”周围的引号。使用键的字符串表示应该可以:

user = User.find(options["user_id"])