我正在尝试向所有在注册时选中“订阅新闻通讯”的用户发送电子邮件新闻通讯。 “已订阅”是我想用来完成此操作的“用户”的 bool 属性。
到目前为止,我有以下内容。
错误:
undefined method `subscribed?' for #<Array:0x007f37ba707828>
mail to: User.pluck(:email).subscribed?
在我的邮件中:
class Monthly_Mailer < ApplicationMailer
def monthly(newsletter)
@newsletter = newsletter
mail to: User.pluck(:email).subscribed?
end
end
我试过去掉 '?'并尝试在我的 users
model
和 controller
def subscribed?
true if self.subscribed == true
end
当然,我在 Controller 中将 self
更改为 @user
并通过 id
选择了 @user
.
如果我应该发布额外的代码,请告诉我。我只是想知道实现此目标的最佳方式,并不一定执着于这种方式。
预先感谢您的输入。
编辑:添加错误
NoMethodError in NewslettersController#send_newsletter undefined method `ascii_only?' for 1:Fixnum
Monthly_Mailer.monthly(@newsletter).deliver_now
Started GET "/send_newsletter?id=1" for 127.0.0.1 at 2015-07-07 11:30:20 -0400
Started GET "/send_newsletter?id=1" for 127.0.0.1 at 2015-07-07 11:30:20 -0400
Processing by NewslettersController#send_newsletter as HTML
Processing by NewslettersController#send_newsletter as HTML
Parameters: {"id"=>"1"}
Parameters: {"id"=>"1"}
Newsletter Load (0.2ms) SELECT "newsletters".* FROM "newsletters" WHERE "newsletters"."id" = $1 LIMIT 1 [["id", 1]]
Newsletter Load (0.2ms) SELECT "newsletters".* FROM "newsletters" WHERE "newsletters"."id" = $1 LIMIT 1 [["id", 1]]
(0.2ms) SELECT "users"."id" FROM "users" WHERE "users"."subscribed" = 't'
(0.2ms) SELECT "users"."id" FROM "users" WHERE "users"."subscribed" = 't'
Rendered monthly_mailer/monthly.html.erb within layouts/mailer (0.3ms)
Rendered monthly_mailer/monthly.html.erb within layouts/mailer (0.3ms)
Monthly_Mailer#monthly: processed outbound mail in 5.4ms
Monthly_Mailer#monthly: processed outbound mail in 5.4ms
Sent mail to (0.5ms)
Sent mail to (0.5ms)
Completed 500 Internal Server Error in 8ms (ActiveRecord: 0.4ms)
Completed 500 Internal Server Error in 8ms (ActiveRecord: 0.4ms)
NoMethodError (undefined method `ascii_only?' for 1:Fixnum):
app/controllers/newsletters_controller.rb:8:in `send_newsletter'
NoMethodError (undefined method `ascii_only?' for 1:Fixnum):
app/controllers/newsletters_controller.rb:8:in `send_newsletter'
最佳答案
根据 http://guides.rubyonrails.org/action_mailer_basics.html (第 2.3.3 节向多个收件人发送电子邮件)
电子邮件列表可以是电子邮件地址数组或地址以逗号分隔的单个字符串。
1) 在用户模型中定义一个函数,例如:
def self.subscribed_users
User.where(subscribed: true)
end
2) 在你的邮件中,你应该这样做,
def monthly(newsletter)
@newsletter = newsletter
mail to: User.subscribed_users.pluck(:email)
# uncomment the below line and comment above line to get comma separated emails
# mail to: User.subscribed_users.collect(&:email).join(',')
end
关于ruby-on-rails - 如何向所有属性为 true 的用户发送电子邮件 (Rails Mailer),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31271585/