2013-07-25 64 views
4

为什么我会得到“未定义的方法编码”“? 我该如何解决这个问题?为什么我会得到“未定义的方法编码”?

错误消息

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 => "[email protected]" 

    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 
+1

也许这可以帮助https://github.com/mikel/mail/issues/417 – Debadatt

+0

@Debadatt或许这就是它!你能告诉我如何解决我的代码? – MKK

回答

9

我发现你正在为BCC正确的阵列可能你有一些输入错误的电子邮件地址。

如果电子邮件地址在@之前包含一个点,例如test.test.com,并且作为数组的一部分提交,那么您会为Array获取未定义的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 
+0

谢谢!这就是它!关键答案! – MKK

+0

它不仅在BCC上发生,还有在发生时。在@之前。对我来说,它总是发生。我解决了这个问题 driver_managers_team:%w([email protected] [email protected]).join(',') – Neoecos

3

在你CallMailer你的,因为:BCC只使用字符串不是数组

所以你做

@user_emails.each do |email|  
    mail(
     :bcc => email, 
     :subject => @mesesage_subject, 
     :body => @mesesage_body) do |format| 
     format.html 
    end 
end 

感谢

+0

谢谢!它应该在哪里? – MKK

+0

用':bcc => [@users_emails]'来代替':bcc => @ users_emails'怎么办? – MKK

+0

Calss CallMailer – 2013-07-25 09:42:58

2

Actuallly BCC看起来像这样

mail(:to => "[email protected]" , :subject => "Example Rails" 
:bcc => ["[email protected]", "Rails Group <[email protected]>"] , 
:cc => "[email protected]") 

这样你就可以做一件事使bcc
bcc = []
@user_emails.each do |email|
bcc << email + ","
end

mail(:to => "[email protected]",:subject => "Example Rails", :bcc => bcc, :cc => "[email protected]") 

感谢

+0

那么替换:bcc => @users_emails与:bcc => [@users_emails]? – MKK

+0

看到我的文章它会工​​作 –

相关问题