рельсы, как узнать, когда отправить электронное письмо на DEF CREATE - PullRequest
0 голосов
/ 18 ноября 2010

У меня есть следующее:

  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

Я хочу добавить в Mailer, чтобы пользователь знал, что он был добавлен в проект, проблема в том, что если я докажу, что до response_to, запись еще не сохранена, так что возможно, что пойти не так, но пользователь все равно получит электронное письмо.

 UserMailer.xxxxxxxxx_notification(objecthere).deliver

И я предполагаю, что не могу поместить почтовик внутри блока response_to. Предложения?

Ответы [ 3 ]

7 голосов
/ 18 ноября 2010

Для этого используются наблюдатели .

создать 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

Подробнее о наблюдателях можно прочитать здесь .

Кроме того, вы должны использовать @project.permissions.new вместо создания. create немедленно сохраняет модель, делая ваш @permission.save вызов избыточным.

Как только вы это сделаете, вам нужно сделать асинхронный код почтовой программы, чтобы он не задерживал веб-запросы. Вот пример с использованием delayed_job.

0 голосов
/ 19 ноября 2010

Или вы можете поставить обратный вызов в вашей модели разрешений:

class Permission
  after_create :send_mail

  def send_mail
    UserMailer.xxxxxxxxx_notification(self).deliver
  end
end
0 голосов
/ 18 ноября 2010

Или вы можете изменить свой код на:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...