2010-11-18 49 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 
相关问题