使用acts_as_paranoid和DelayedJob?

时间:2017-01-13 10:56:00

标签: ruby-on-rails delayed-job ruby-paranoia

有人可以告诉我如何将acts_as_paranoidDelayedJob进行整合吗?我尝试过创建课程Delayed::Backend::ActiveRecord::Job并向其中添加acts_as_paranoid,但即使我使用初始化程序并require新课程,acts_as_paranoid也似乎没有做任何事情

我没有收到任何错误,因此paranoia似乎已正确安装,并且在成功完成后工作被彻底删除 - 这当然是我试图阻止的。

很高兴尝试任何调试建议,如果没有人读到这个并立即知道我是如何搞砸了。

2 个答案:

答案 0 :(得分:0)

原来我选择了“默认范围”问题。 acts_as_paranoid更改默认范围,以便find仅返回尚未软删除的条目。如果您想查看所有条目,包括软删除的条目,则需要添加with_deleted作为查询范围,或者在向类添加acts_as_paranoid时,按照示例添加:

class Client < ActiveRecord::Base
  acts_as_paranoid without_default_scope: true

  ...
end

随着这些变化中的任何一个,事情都在发挥作用。

答案 1 :(得分:0)

我知道您回答了自己的问题,但是您的回答并没有帮助那些希望将DelayedJobacts_as_paranoid集成在一起的人,因此我想为其他人解释一下。

  1. 创建迁移以将deleted_at添加到delayed_jobs

    rails generate migration add_deleted_at_to_delayed_jobs deleted_at:datetime
    
  2. 运行迁移:

    rake db:migrate
    
  3. 扩展Delayed::Job类以添加acts_as_paranoid

    config/initializers/delayed_job.rb

    class Delayed::Job
    
      acts_as_paranoid
    
    end
    

就是这样!

现在,当一项工作完成时,您会发现它并没有从delayed_jobs表中删除,它只是在deleted_at列中放置了一个时间戳记,以便工人捡起来。

ProTip:deleted_at列还指示作业何时完成。