2010-11-18 60 views
0

我有以下幾點:軌道,如何知道何時發送一封電子郵件,在DEF CREATE

def create 

    @permission = @project.permissions.create(params[:permission]) 

    respond_to do |format| 
     if @permission.save 
     format.js 
     else 
     format.js { render :js => @permission.errors } 
     end 
    end 
    end 

我想在梅勒添加,讓用戶知道他們已被添加到一個項目,問題是,如果我在respond_to之前執行此操作,該記錄還沒有保存,所以有可能出現問題,但用戶仍然可以收到電子郵件。

UserMailer.xxxxxxxxx_notification(objecthere).deliver 

而我猜我不能把一個郵件發送到respond_to塊。建議?

回答

7

這就是觀察者用於。

創建app/models/permission_observer.rb

class PermissionObserver < ActiveRecord::Observer 
    def after_create(permission) 
    # put your mailer code here 
    end 
end 

config/application.rb添加觀察者

config.active_record.observers = :permission_observer 

你可以閱讀更多關於觀察員here

此外,您應該使用​​而不是創建。立即創建保存模型,使您的@permission.save調用冗餘。

一旦你有了這個地方,你應該考慮讓你的郵件代碼異步,所以它不會阻止網絡請求。使用delayed_job的Here's an example

0

,也可以編輯您的代碼:

def create 
    @permission = @project.permissions.build(params[:permission]) 

    if @permission.save 
    UserMailer.xxxxxxxxx_notification(objecthere).deliver 
    respond_to do |format| 
     format.js 
    end 
    else 
    respond_to do |format| 
     format.js { render :js => @permission.errors } 
    end 
    end 
end 
0

或者你可以把一個回調在您的權限模型:

class Permission 
    after_create :send_mail 

    def send_mail 
    UserMailer.xxxxxxxxx_notification(self).deliver 
    end 
end 
相關問題