User 在我的应用程序中,我运行一个 after_create 方法,然后异步触发Sidekiq工作线程。
User
after_create
def perform user_id @user = ::User.find user_id # ... end
ActiveRecord::RecordNotFound:找不到id=315928979197048617的用户
但使用rails控制台检查用户id是否可找到:
User.find(315928979197048617) => #<User id: 315928979197048617>
这是因为创建新用户需要一些时间,并且工作人员在完成时已经执行了该方法吗?如果,我该如何纠正这种行为?
你说得绝对正确 after_create ActiveRecord::RecordNotFound worker中的错误(尽管如果数据库赢得比赛,那么一切似乎都按计划进行)。
ActiveRecord::RecordNotFound
after_commit 回调。由于您仅在创建时执行此操作,因此需要 after_commit on: :create
after_commit
after_commit on: :create
这确实会引起最后一个问题, This blog post has a good write up on using after_commit 并建议 test_after_commit gem
test_after_commit