如何向HABTM协会中的所有用户发送电子邮件?

时间:2013-08-31 20:51:03

标签: ruby-on-rails ruby activerecord actionmailer

我正在尝试将users添加到conversation时通知他们。我可以通过查找对话并只需拨打@conversation.users来访问所有用户。在这个例子中它是3.

conversation has_and_belongs_to_many :users
user has_and_belongs_to_many :conversations

在我的conversation.rb模型中,我正在尝试向每位after_save发送电子邮件。

  def send_notify_mail
    @conversation = self
    @conversation_users = @conversation.users
    @conversation_users.each do |user|
      ConversationMailer.notify_mail(self.id).deliver
    end
  end

我没有收到任何错误,但它只是将电子邮件发送给一个用户,而不是所有用户。我是否试图以正确的方式做到这一点?我应该在模型中循环用户吗?

2 个答案:

答案 0 :(得分:0)

不应该这个

ConversationMailer.notify_mail(self.id).deliver

是这个

ConversationMailer.notify_mail(user).deliver

答案 1 :(得分:0)

解决方案取决于您如何定义notify_mail方法。但是,可以合理地假设您的代码确实将每个用户传递给方法 - 相反,它传递了Conversation对象。您可以通过以下方式解决此问题:

@conversation_users.each do |user|
  ConversationMailer.notify_mail(user).deliver
end

同样,这取决于您的notify_mail方法的结构,但如果它向User对象发送电子邮件,那么这可能会解决您的问题。