1

以下のコードで 2 つのメールが送信されていますが、どちらも同じメッセージ 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")

電子メールは一度送信され、すぐに再送信されます。領収書なので、当然二重送信はやめさせないといけない。

考え?

4

2 に答える 2

3

before_save :check_if_confirmedレコードが保存されるたびに発生します (作成された場合でも)

before_update :check_if_confirmedレコードがすでに作成されていて、データが更新されたときに発生します。

間違ったコールバックを使用しているため、メール配信が 2 回発生しています。before_save十分なはずです。

于 2012-08-22T09:36:22.590 に答える
0

これは、コールバックbefore_save:check_if_confirmed before_update:check_if_confirmedが原因で発生しています。

それらの1つだけを使用してください

于 2012-08-22T09:38:53.927 に答える