我目前有许多电子邮件与模型中的各种状态相关联。 IE,如果状态从“待定”变为“已确认”,则会生成电子邮件。
我现在正在重新思考电子邮件生成应该在模型中还是在控制器中?我一直在更新我的邮件程序,以便它们不对称地执行,这意味着替换我以前的代码,它将数据库支持的对象作为参数传递到我的邮件程序中,而是传递记录标识符,以便以后查找它们。
从模型中执行此操作的问题是,在调用方法中的所有步骤之前,记录实际上不会保存。因此,如果他们依赖于任何步骤等,它会破坏我的邮件。
我是否应该将所有这些全部移出模型?或者是否有其他方法可以确保在执行邮件之前保存?
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
如何将您的电子邮件生成放在ActiveRecord::Oserver中呢?