下面的代码发送了两封电子邮件,两封邮件都有相同的邮件ID,但我怀疑它可能是我的代码。
控制器:
@payment.update_attributes(:status => "Confirmed")
付款模式:
before_save :check_if_confirmed
before_update :check_if_confirmed
def check_if_confirmed
if status == "Confirmed"
tickets.each do |t|
t.status = "Confirmed"
t.save
end
Emailer.payment(self,user.id,user.full_name, user.email, self.total, self.id).deliver
end
Emailer.rb
def payment(payment, user_id, buyer_name, email = payment.user.email, price, payment_id)
....
mail(:from => "John Smith <john@smith.com>", :to => email, :subject => "Whatever")
电子邮件将被发送一次,然后立即再次发送。收据很自然,我需要阻止它被发送两次。
思想?
答案 0 :(得分:3)
before_save :check_if_confirmed
(即使已创建记录)
before_update :check_if_confirmed
在已创建记录并且数据刚刚更新时触发。
您正在使用错误的回调,即两次发送邮件。 before_save
就足够了。
答案 1 :(得分:0)
由于回调,这种情况正在发生 before_save:check_if_confirmed before_update:check_if_confirmed
只使用其中一个