rails,如何知道何时发送DEF CREATE的电子邮件

AnA*_*ice 0 ruby-on-rails ruby-on-rails-3

我有以下内容:

  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
Run Code Online (Sandbox Code Playgroud)

我想添加一个Mailer,让用户知道他们已被添加到项目中,问题是,如果我在respond_to之前发布,那么记录还没有被保存,所以有可能出现问题但是用户仍然会收到一封电子邮件.

 UserMailer.xxxxxxxxx_notification(objecthere).deliver
Run Code Online (Sandbox Code Playgroud)

而且我猜我不能把邮件放在respond_to块中.建议?

Ada*_*sek 7

这就是观察者所使用的.

创建 app/models/permission_observer.rb

class PermissionObserver < ActiveRecord::Observer
  def after_create(permission)
    # put your mailer code here
  end
end
Run Code Online (Sandbox Code Playgroud)

config/application.rb添加观察者

config.active_record.observers = :permission_observer
Run Code Online (Sandbox Code Playgroud)

你可以阅读更多关于观察员这里.

此外,您应该使用@project.permissions.new而不是创建.create会立即保存模型,使您的@permission.save呼叫变得多余.

一旦你有了这个,你应该考虑使你的邮件代码异步,这样它就不会阻止web请求.这是使用delayed_job 的示例.