在项目讨论中向所有用户发送电子邮件

时间:2012-01-31 23:57:56

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

我在尝试弄清楚如何向在论坛主题中发帖的所有用户发送电子邮件时遇到了一些麻烦。我在控制器的正确位置有user_mailer设置和UserMailer.new_post(@ post).deliver。只是想弄清楚如何只提取具有属于该主题的帖子的用户的电子邮件(数组)。

  • 用户has_many帖子
  • 主题has_many帖子
  • 帖子belongs_to用户以及belongs_to主题

我的伪代码是:

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

或类似的东西。

几乎就像;假设我有一个博客。并有10位用户发表评论我希望能够触发我的ActionMailer向所有10个用户发送电子邮件,如果有人在他们之后发表新评论。

我是否只需将它们全部放在:bcc下一封电子邮件或将它们作为单独的电子邮件发送?到目前为止,我认为将它们添加到:bcc作为像[array] .join(“,”)这样的数组 - 这是不正确的?

btw:我正在使用Heroku,Rails 3.1和SendGrid插件

2 个答案:

答案 0 :(得分:2)

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 :(得分:1)

您需要先对用户进行范围调整,然后选择电子邮件属性。

获取此类用户:

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

然后您可以使用该数组用户执行任何操作,例如将电子邮件地址映射到数组:

user_emails = users.map { |u| u.email }