Отправить письмо всем пользователям с сообщениями в обсуждении проекта - PullRequest
0 голосов
/ 01 февраля 2012

У меня возникли проблемы с попыткой выяснить, как я отправлю электронное письмо всем пользователям, которые сделали сообщение в теме обсуждения. У меня есть настройки user_mailer и UserMailer.new_post (@post) .deliver в нужном месте в контроллере. Просто пытаюсь понять, как извлечь только электронные письма (массива) пользователей, у которых есть сообщения, принадлежащие этой теме.

  • Пользователь has_many сообщений
  • Тема имеет много сообщений
  • Сообщения принадлежат пользователю, а также принадлежат теме

Мой псевдокод будет:

User.emails.where(User.posts == project.post)

или что-то в этом роде.

Это почти как; допустим, у меня есть блог. И 10 пользователей комментируют. Я хочу, чтобы мой ActionMailer отправлял электронные письма всем 10 пользователям, если кто-то сделает новый комментарий после них.

Могу ли я просто поместить их все в: bcc для одного письма или отправить их как отдельные письма? До сих пор я хотел бы добавить их в: bcc как массив, подобный [array] .join (",") - это неправильно?

Кстати: я использую Heroku, Rails 3.1 и аддон SendGrid

Ответы [ 2 ]

2 голосов
/ 01 февраля 2012
class Project < ActiveRecord::Base
  has_many :posts, after_add: :notify_on_new_post

  def notify_on_new_post(post)
    users_to_notify = posts.map(&:user).uniq - [post.user]
    bcc = users_to_notify.map(&:email).compact * ', '
    # ...
  end
end

class Post < ActiveRecord::Base
  belongs_to :project
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :posts
end
1 голос
/ 01 февраля 2012

Сначала вы захотите охватить пользователей, а затем выберите атрибут электронной почты.

Получите таких пользователей:

users = User.where(:posts => project.post)

, и тогда вы сможете делать с этим массивом пользователей все, что захотите, например сопоставлять адреса электронной почты с массивом:

user_emails = users.map { |u| u.email }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...