Ruby on rails 3.2 是否有一种方法可以仅在create发生提交后触发Rails模型上的回调?

Ruby on rails 3.2 是否有一种方法可以仅在create发生提交后触发Rails模型上的回调?,ruby-on-rails-3.2,callback,rails-activerecord,Ruby On Rails 3.2,Callback,Rails Activerecord,我正在从创建后的回调调用一个“queue”方法,以在模型实例创建后触发其Sidekiq进程。然而,我的Sidekiq员工第一次接手这份工作时,记录还没有公布 我知道在提交后有一个记录,但我只希望对象在创建时排队,而不是在更新时排队。如何在没有任何涉及日期检查等的黑客攻击的情况下完成此操作?您可以在创建回调之前在中设置一个标志 创建前:设置新标志 提交后:队列 def设置新标志 @__new_flag=true 结束 def队列 如果定义@__新国旗 #排队 删除_实例_变量(:@_新_标志) 结

我正在从创建后的
回调调用一个“queue”方法,以在模型实例创建后触发其Sidekiq进程。然而,我的Sidekiq员工第一次接手这份工作时,记录还没有公布


我知道在提交后有一个
记录,但我只希望对象在创建时排队,而不是在更新时排队。如何在没有任何涉及日期检查等的黑客攻击的情况下完成此操作?

您可以在创建回调之前在
中设置一个标志

创建前:设置新标志
提交后:队列
def设置新标志
@__new_flag=true
结束
def队列
如果定义@__新国旗
#排队
删除_实例_变量(:@_新_标志)
结束
#放置self.previous\u更改
结束
或者只需在提交后的
中检查
之前的更改
。id键中的
nil
只能用于新的\u记录。下面是
以前的更改的输出示例

{“name”=>[nil,“newest”],“id”=>[nil,“cBdjzQgxir45xQJ9UXGRSR”],“version_id”=>[nil,“cBdnAogxir45xQJ9UXGRSR”]}

正确的方法是使用
:on
选项:

after_commit :queue, :on => :create

更多信息:

介绍睡眠?这可能也会起作用(再次黑客攻击)。它至少会减少失败。在提交后的
方法中检查
\id\u was
如何。如果它是一个新的记录,也许它应该是
nil
,这看起来是一条路要走。有人能证实这是真的吗?@JoshPinter为我工作!我在几个代码库中使用过它,sidekiq在这些代码库中提取尚未提交到数据库的作业ID。