5

「undefined method `encoding'」と表示されるのはなぜですか? どうすればこれを修正できますか?

エラーメッセージ

NoMethodError (undefined method `encoding' for #<Array:0x000000218f61e8>):
 app/controllers/messages_controller.rb:255:in `deliver'

messages_controller.rb

# coding: UTF-8

class MessagesController < ApplicationController

    deliver
        users = User.confirmed.order("created_at ASC")

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

        subject = params[:messages][:subject] 
        body = params[:messages][:body]

        CallMailer.call_email(@users_emails, subject, body).deliver  <= This is line 255  
    end

end

メーラー/call_mailer.rb

# coding: UTF-8

class CallMailer < ActionMailer::Base

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

    def call_email(users_emails, mesesage_subject, mesesage_body)
        @users_emails = users_emails
        @mesesage_subject = mesesage_subject
        @mesesage_body = mesesage_body
        mail(
            :bcc => @users_emails,
            :subject => @mesesage_subject,
            :body => @mesesage_body) do |format|
            format.html
        end
    end

end
4

3 に答える 3

10

bcc の正しい配列を取得していることがわかりました。おそらく、メール アドレスのタイプが間違っている可能性があります。

たとえば、test.@test.com のように、電子メール アドレスが @ の前にドットを含み、配列の一部として送信されると、配列に対して未定義のメソッド「encoding」が取得されます。このバグは Ruby 1.9 でのみ発生し、アドレスが配列として送信された場合にのみ発生します。

これを試して

def call_email(users_emails, mesesage_subject, mesesage_body)
        @users_emails = users_emails
        @mesesage_subject = mesesage_subject
        @mesesage_body = mesesage_body
        mail(
            :bcc => @users_emails.join(','),
            :subject => @mesesage_subject,
            :body => @mesesage_body) do |format|
            format.html
        end
    end
于 2013-07-25T09:57:32.870 に答える
2

実際の bcc は次のようになります

 mail(:to => "rails@example.com" ,  :subject => "Example Rails"
 :bcc => ["bcc@rails.com", "Rails Group <railsgroup@example.com>"] ,
 :cc => "other@example.com" )

だからあなたは1つのことをすることができます
bcc = []
@user_emails.each do |email|
bcc << email + ","
end

    mail(:to => "rails@example.com",:subject => "Example Rails", :bcc => bcc, :cc => "other@example.com" ) 

ありがとう

于 2013-07-25T09:51:39.767 に答える