我正在从after_create
回调中调用“队列”方法,以在模型实例创建后触发 Sidekiq 进程。然而,我的 Sidekiq 工人第一次接手工作,记录还没有提交。
我知道有一条after_commit
记录,但我只希望对象在创建时排队,而不是在更新时排队。如果没有任何涉及日期检查等的黑客行为,我如何才能做到这一点?
我正在从after_create
回调中调用“队列”方法,以在模型实例创建后触发 Sidekiq 进程。然而,我的 Sidekiq 工人第一次接手工作,记录还没有提交。
我知道有一条after_commit
记录,但我只希望对象在创建时排队,而不是在更新时排队。如果没有任何涉及日期检查等的黑客行为,我如何才能做到这一点?
before_create
你可以在回调中设置一个标志
before_create :set_new_flag
after_commit :queue
def set_new_flag
@__new_flag = true
end
def queue
if defined? @__new_flag
#queue it up
remove_instance_variable(:@__new_flag)
end
# puts self.previous_changes
end
或者只是#previous_changes
在after_commit
. nil
in id 键应仅用于 new_records 。这是一个示例输出previous_changes
{"name"=>[nil, "newest"], "id"=>[nil, "cBdjzQgxir45xQJ9UXGRSR"], "version_id"=>[nil, "cBdnAogxir45xQJ9UXGRSR"]}
正确的方法是使用:on
选项:
after_commit :queue, :on => :create