0

現在、モデル内のさまざまな状態に関連付けられた多数の電子メールがあります。 IEが "保留中"から "確認済み"になると、電子メールが生成されます。メーラーをステートフルモデルに含めるかcontollers内に保持する

電子メールの生成がモデル内にあるのかコントローラーにあるのかを今考え直していますか?メーラーを非対称に実行するように更新しています。これは、データベースのオブジェクトをパラメータとしてマイラーに渡し、代わりにレコード識別子を渡して後で参照できるようにするためです。

モデル内からこれを行う際の問題は、メソッド内のすべてのステップが呼び出されるまでレコードが実際には保存されないことです。それで、メーラーがステップなどに依存している場合、私のメーラーが壊れてしまいます。

これをすべてモデルから外すべきですか?または、メールを送信する前に保存する方法がありますか?代わりにActiveRecord::Oserverてください電子メールの生成を置くことについての

event :confirm do 
    transitions :to => :confirmed, :from => :pending, :on_transition => :do_confirm 
    end 

    def do_confirm(finished_at = Time.now) 
     self.confirmed_at = finished_at 
     UserMailer.confirmed_booking_request(self).deliver # old way, doesn't matter if record is saved or not 
     UserMailer.confirmed_booking_request(self.id).deliver #doesn't work since the record hasn't been saved and confirmed_at is nil 
    end 

または私は私のコントローラ内のメールの生成を行う必要があります

if @confirmation.save 
    @confirmation.booking.reject! 
    UserMailer.confirmed_booking_request(@confirmation.id).deliver #previously did this all from the above method 
    redirect_to space_path(@confirmation.booking.space) 
    end 

答えて

1

どのように?