在resque中将对象作为参数发送

时间:2016-02-20 19:50:50

标签: ruby-on-rails ruby resque

抱歉,我的新手问题。

我发送的current_user帮助器具有User对象类型作为resque作业运行器参数,如此

      JobRunner.run LikerCommenterAnalyzerJob, current_user, session['basic_instagram_data']['access_token'], 505

但是当我尝试在resque方法中获取current_user参数时,它变为Hash类型

def self.perform (current_user, access_token, archive_id)

account = current_user.InstagramAccount.where('access_token', access_token).first

end

我的错误是

undefined method `InstagramAccount' for #<Hash:0x007f9e39c27458>

1 个答案:

答案 0 :(得分:2)

基本上,当您将任务推送到resque时,它将存储在稍后运行的某个位置(例如Redis)。因此它无法存储您的对象,它只存储您传递的参数的描述,上面的Hash是描述。

然后Resque下拉说明来运行它。

所以解决方案是,将您用来检索对象的信息放入(这是最佳实践)

推送任务时:

JobRunner.run LikerCommenterAnalyzerJob, current_user.id, session['basic_instagram_data']['access_token'], 505

运行任务时

def self.perform (user_id, access_token, archive_id)
  user = User.find(user_id)
  account = user.InstagramAccount.where('access_token', access_token).first
end