我正在呼叫#34;队列"来自after_create
回调的方法,在模型实例创建后触发模型实例上的Sidekiq进程。然而,我的Sidekiq工作人员第一次接受这份工作时,记录还没有实现。
我知道有after_commit
条记录,但我只希望对象在创建时排队,而不是在更新时排队。如何在没有任何涉及日期检查等问题的情况下实现这一目标?
答案 0 :(得分:1)
您可以在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
。 id键中的nil
应仅适用于new_records。以下是previous_changes
{"name"=>[nil, "newest"], "id"=>[nil, "cBdjzQgxir45xQJ9UXGRSR"], "version_id"=>[nil, "cBdnAogxir45xQJ9UXGRSR"]}
答案 1 :(得分:1)
正确的方法是使用:on
选项:
after_commit :queue, :on => :create