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