我正在尝试使用ActiveRecord::Base.transaction
来确保一次创建Customer
,CustomerAccount
和StockNotification
,或者根本不创建 none如果其中一个失败
这是我的交易
stock_notification.rb:
validates_presence_of :email
def self.make parameters
ActiveRecord::Base.transaction do
shop_id = ProductVariant.find(parameters[:product_variant_id]).shop_id
parameters[:customer_account_id] = CustomerAccount.find_or_make!(parameters[:email], shop_id).id
@stock_notification = StockNotification.create(parameters) # reference A
end
@stock_notification
end
你可能也需要这个 customer_account.rb:
def self.find_or_make! email, shop_id
customer = Customer.where(email: email).first_or_create!
CustomerAccount.where(shop_id: shop_id, customer_id: customer.id).first_or_create!
end
如果我使用空白电子邮件致电StockNotification.make
,则create
失败(参考A)并且未创建库存通知,但问题是Customer
/ {{1}仍然在被创造。
所以CustomerAccount
根本没有完成它的工作,或者我错过了什么?