Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用ActionMailer向多个用户发送电子邮件_Ruby On Rails_Ruby On Rails 3.1_Actionmailer - Fatal编程技术网

Ruby on rails 使用ActionMailer向多个用户发送电子邮件

Ruby on rails 使用ActionMailer向多个用户发送电子邮件,ruby-on-rails,ruby-on-rails-3.1,actionmailer,Ruby On Rails,Ruby On Rails 3.1,Actionmailer,这是一个全新的问题,但我想知道是否有人可以帮助建立一个邮件。我有一个“用户”模型,在它下面嵌套了一个“联系人”模型(有很多/属于关系) 我现在正在尝试创建一个邮件程序,它将由用户页面上的特定操作(创建帖子)触发,并将通过电子邮件发送属于该用户的所有联系人。但我无法破解邮件程序所需的语法-我尝试将收件人设置为@user.contacts.all,并尝试像使用一样循环使用它们。有人能建议最干净的方法吗 以下是我目前掌握的代码: Posts controller: after_create :s

这是一个全新的问题,但我想知道是否有人可以帮助建立一个邮件。我有一个“用户”模型,在它下面嵌套了一个“联系人”模型(有很多/属于关系)

我现在正在尝试创建一个邮件程序,它将由用户页面上的特定操作(创建帖子)触发,并将通过电子邮件发送属于该用户的所有联系人。但我无法破解邮件程序所需的语法-我尝试将收件人设置为
@user.contacts.all
,并尝试像使用一样循环使用它们。有人能建议最干净的方法吗

以下是我目前掌握的代码:

Posts controller:

  after_create :send_contact_email

  private

  def send_contact_email
    ContactMailer.contact_email(self).deliver
  end
联系_mailer(这是我最近的一次尝试,来自RoR网站-我怀疑这不是最好的方法…)


有一个输入错误:您在
联系电子邮件
方法中使用的是
@user
而不是
user
。 这可能不是唯一的问题,但至少是错误消息的原因。
“nil:NilClass的未定义方法‘contacts’”

更新

因此,使用正确的语法,从默认选项中删除
:to
,并在
contact\u 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
class ContactMailer”notification@example.com"
def联系人_电子邮件(用户)
@用户=用户
邮件(:subject=>“Post added”,:to=>user.contacts.map(&:contact\u email),)
结束
结束

有一个输入错误:您在
联系电子邮件
方法中使用的是
@user
而不是
user
。 这可能不是唯一的问题,但至少是错误消息的原因。
“nil:NilClass的未定义方法‘contacts’”

更新

因此,使用正确的语法,从默认选项中删除
:to
,并在
contact\u 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
class ContactMailer”notification@example.com"
def联系人_电子邮件(用户)
@用户=用户
邮件(:subject=>“Post added”,:to=>user.contacts.map(&:contact\u email),)
结束
结束
class ContactMailerContact.all.map(&:Contact\u email),
:from=>”notification@example.com"
def联系人_电子邮件(用户)
recipients=user.contacts.collect(&:contact\u email.join(“,”)
邮件(:subject=>“Post added”,:to=>收件人)
结束
结束
class ContactMailerContact.all.map(&:Contact\u email),
:from=>”notification@example.com"
def联系人_电子邮件(用户)
recipients=user.contacts.collect(&:contact\u email.join(“,”)
邮件(:subject=>“Post added”,:to=>收件人)
结束
结束

即使将其更改为
recipients user.contacts.all
我仍然收到相同的消息,恐怕:-(因此,
user
的值也可能为零……然而,你的方法
contact\u email
在语法上不正确,我看不出你想做什么。请看中的示例以帮助你谢谢-我使用的是旧版本的rails文档,结果是。语法正确(如上所述),我现在有了成功发送电子邮件的
contact\u email
方法——不幸的是,它会发送到数据库中的所有联系人,不管他们是否属于我添加帖子的用户。再次,更改为
:to=>user.contact.all.map(&:contact\u email),
似乎不起作用…我已经编辑了我的答案,您需要将
:to=>
选项移动到
联系人电子邮件方法感谢Baldrick-您的新代码起作用并发送电子邮件,但它仍然包括属于其他用户的联系人:-(即使将其更改为
recipients user.contacts.all
我仍然收到相同的消息,恐怕:-(因此,
user
的值也可能为零……然而,你的方法
contact\u email
在语法上不正确,我看不出你想做什么。请看中的示例以帮助你谢谢-我使用的是旧版本的rails文档,结果是。语法正确(如上所述),我现在有了成功发送电子邮件的
contact\u email
方法——不幸的是,它会发送到数据库中的所有联系人,不管他们是否属于我添加帖子的用户。再次,更改为
:to=>user.contact.all.map(&:contact\u email),
似乎不起作用…我已经编辑了我的答案,您需要将
:to=>
选项移动到
联系人电子邮件方法感谢Baldrick-您的新代码起作用并发送电子邮件,但它仍然包括属于其他用户的联系人:-(Hi Sandip-谢谢你的回答,但是通过这段代码我仍然得到了错误
未定义的方法“contacts”for#
-我是否也应该在这里声明contacts?你没有在用户模型中定义了user has_many:contacts association吗?Hi Sandip-谢谢你的回答,但是通过这段代码我仍然得到了错误
未定义的方法'contacts'for#
-我也应该在这里声明联系人吗?您没有在用户模型中定义用户has\u many:contacts关联吗??
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
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