ruby-on-rails - 如何向所有属性为 true 的用户发送电子邮件 (Rails Mailer)

标签 ruby-on-rails actionmailer newsletter

我正在尝试向所有在注册时选中“订阅新闻通讯”的用户发送电子邮件新闻通讯。 “已订阅”是我想用来完成此操作的“用户”的 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 modelcontroller

中放置以下方法
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/

相关文章:

ruby-on-rails - 构建异步邮件程序的最佳实践(使用 Sidekiq)

php - 使用 Ruby on Rails 保护数据?

ruby-on-rails - Rails 5,未定义方法 `for' for #<Devise 在线 devise_parameter_sanitizer.for

mysql - Rails Production DB 不是 YML 中的内容

ruby-on-rails - Devise 和 devise_cas_authenticable 出现 PG::UniqueViolation 错误

ruby-on-rails - rails 5 : ActionMailer's "deliver_later" never delivers in production

configuration - ActionMailer 设置在开发和生产之间存在错误差异

image - 有没有一种已知的方法可以在发送时事通讯时强制显示您的图像?

html - 响应表 - 静态标题列到行

django - 默认 Django 复选框为 true 且隐藏