0

私は研究に時間を費やしましたが、これが私が考えることができたものです。
でも、この部分に何か問題があるのは確かだ@users_emails += user.email

私のコードを修正して機能させることはできますか?

コントローラー/users_controller.rb

def send_all_at_once

    @notification_users = User.where("users.country_id=?", 36)

    @notification_users.each do |user|
        @users_emails += user.email
    end

    @subject = "Test subject"
    @body = "Test body"

    CallMailer.call_email(@users_emails, @subject, @body).deliver

end

app/mailers/call_mailer.rb

class CallMailer < ActionMailer::Base

    default :from => "dont-reply@example.com"

    def call_email(@users_emails, @subject, @body)
        mail(:to => "admin@example.com",
            :bcc => @users_emails,
            :subject => @subject,
            :body => @body) do |format|
            format.html
            format.text
        end
    end 

end

ビュー/call_mailer/call_email.html.erb

<html>
    <head>
        <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
    </head>
    <body>
        <p>
            You received a message.
        </p>
        <p>
            Subject: <%= raw @subject %>
        </p>
        <blockquote>
            <p>
                <%= simple_format(@body) %> 
            </p>
        </blockquote>
        <p>
            From: <%= link_to root_url,root_url %>
        </p>
    </body>
</html>
4

1 に答える 1

1

通常、bcc のメール アドレスを配列として渡します。

mail(:to => "admin@example.com",
    :bcc => ['first@email.com', 'second@email.com', 'third@email.com'],
    :subject => @subject,
    :body => @body)

ただし@user_emailsはすでに電子メールの配列であるため、括弧を使用せずにインスタンス変数を直接渡す必要があります。

mail(:to => "admin@example.com",
    :bcc => @users_emails,
    :subject => @subject,
    :body => @body)

以下は、ユーザーの電子メールの配列を作成するための正しい構文を示しています。

@notification_users.each do |user|
    @users_emails << user.email
end

アップデート:

コメンターのmbratch が鋭く指摘しているように、上記の例の shovel 演算子は+=、次の方法で plus-equals ( ) 演算子に置き換えることができます。

@user_emails = []
@notification_users.each do |user|
    @users_emails += [user.email]
end

更新 2:

mail関数の呼び出し内でユーザーの電子メールを直接マッピングすることで、コントローラー ループを完全にバイパスできます。

mail(:to => "admin@example.com",
    :bcc => User.where("users.country_id=?", 36).map(&:email),
    :subject => @subject,
    :body => @body)
于 2013-07-22T17:51:16.920 に答える