1
我需要創建一個用戶,並在註冊時發送電子郵件:after_commit或after_create用於使用交易的模型?
class User < ActiveRecord::Base
after_commit :send_email, on: :create # I believe it's better than after_create
# after_create :send_email, on: :create
class << self
def create_with_some_params(params)
#....
user.transaction do
if user.save && some_condition
user.category = category
raise ActiveRecord::Rollback unless user.category.persisted?
end
end
rescue => e
logger.error e.message
ensure
[user, some_data]
end
end
end
send_email(....)
#.....
end
end
起初我用after_create
發送一封電子郵件,正在交易中進行發送電子郵件。而且經常發生超時。所以我開始使用after_commit
,因爲它在事務之後被稱爲,因此由於電子郵件緩慢而不會發生超時。
因此,在這種情況下與user.transaction do
,我應該使用after_commit
而不是after_create
來避免事務超時?