我有一个Rails应用程序,用于查询外部Web服务以更新记录。 我想继续轮询Web服务,直到用户会话到期。
目前,我在show action中为我想要更新的记录创建一个ActiveJob。
在ActiveJob中,我使用
重新安排它 self.class.set(wait: 60.seconds).perform_later(record_id)
问题是如果用户再次进入show动作,它将创建另一个ActiveJob。
无论如何都要防止创建重复的作业?
答案 0 :(得分:0)
首次在用户首次访问节目时设置Cookie值。
self.class.set(wait: 60.seconds).perform_later(record_id) if cookies[:_aj].nil?
cookies[:_aj] = true
也可以在Record
中创建一个列,也可以将其命名为pending_update
,并在计划运行作业时将其设置为true
,并将其设置为false
预定工作结束。这样,即使用户清除了cookie,您的程序也不会创建重复的作业。
答案 1 :(得分:0)
理想情况下,将有一种方法可以搜索ActiveJob以查看是否已经存在。 ActiveJob.find_by(job: JobType, params: record_id
之类的东西。这样,您就可以在创建副本之前操纵作业。我将进一步研究,看看是否可以创建...