2013-07-25 85 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

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

相關問題