Отправка по электронной почте нескольким пользователям с помощью ActionMailer - PullRequest
0 голосов
/ 30 января 2012

Это полный вопрос новичка, но мне интересно, может ли кто-нибудь помочь с установкой почтовой программы.У меня есть модель 'users' и вложенная в нее модель 'contacts' (с отношением has_many / own_to).

Я сейчас пытаюсь создать почтовую программу, которая будет запускаться определенным действием (создатьсообщение) на странице пользователя, и будет по электронной почте все контакты, принадлежащие этому пользователю.Но я не могу взломать синтаксис, необходимый для почтовой программы - я попытался установить получателей на @user.contacts.all, и я пробовал циклически просматривать их, как с этим решением .Кто-нибудь может посоветовать самый чистый способ сделать это?

Вот код, который у меня пока есть:

Posts controller:

  after_create :send_contact_email

  private

  def send_contact_email
    ContactMailer.contact_email(self).deliver
  end

contact_mailer (это моя последняя попытка, взята с сайта RoR - я подозреваю,это НЕ лучший способ сделать это ...)

class ContactMailer < ActionMailer::Base 

  def contact_email(user)
    recipients    @user.contacts.all
    from          "My Awesome Site Notifications <notifications@example.com>"
    subject       "Welcome to My Awesome Site"
    sent_on       Time.now
    body          {}
  end
end

А затем основное сообщение для contact_email.html.erb.

Текущая ошибка:

NoMethodError в UsersController # create_post

неопределенный метод `contacts 'для nil: NilClass.

Любой совет, который вы можете предложить, будет с благодарностью принят!

* Обновление *

Следуя совету Болдрика, метод contact_email теперь имеет вид:

class ContactMailer < ActionMailer::Base 
  default :to => Contact.all.map(&:contact_email),
          :from => "notification@example.com"

  def contact_email(user)
    @user = user
    mail(:subject => "Post added")
  end
end

Ответы [ 2 ]

1 голос
/ 30 января 2012
class ContactMailer < ActionMailer::Base 
  default :to => Contact.all.map(&:contact_email),
          :from => "notification@example.com"

  def contact_email(user)
    recipients = user.contacts.collect(&:contact_email).join(',')
    mail(:subject => "Post added", :to => recipients)
  end
end
1 голос
/ 30 января 2012

Существует опечатка: вы используете @user вместо user в методе contact_email. Возможно, это не единственная проблема, но, по крайней мере, причина сообщения об ошибке "undefined method 'contacts' for nil:NilClass "

Обновление

Таким образом, с правильным синтаксисом удалите :to из параметров по умолчанию и установите его в методе contact_email с контактами вашего пользователя:

class ContactMailer < ActionMailer::Base 
  default :from => "notification@example.com"

  def contact_email(user)
    @user = user
    mail(:subject => "Post added", :to => user.contacts.map(&:contact_email),)
  end
end
...