我发送的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>
答案 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