0

我試圖從升級軌應用2.3到3.0.6軌道3升級 - 您使用的是舊的API在郵件類

其在軌道下面的代碼2.3

class MessageSender < ActionMailer::Base 
    def send_message(subject,to,from,body,respondent = nil, content_type = 'text/plain') 
     @content_type  = content_type 
     @subject    = subject 
     @recipients   = to 
     @from    = from 
    # @sent_on    = Time.now 
     @body    = {:body_text => body} 
    end 
end 

在升級過程的代碼被通過參照該著名blog有關在使用的ActionMailer改性如下面

class MessageSender < ActionMailer::Base 
    def send_message(subjet,to,from,body,respondent = nil,content_type='text/plain') 
     mail(:to => to, :subject => subject, :from => from, :body => body, :content_type => content_type) 
    end 
end 

軌3.0

最後跑rake rails:upgrade:check(檢查導軌3個不兼容的功能),它顯示

Old ActionMailer class API 
You're using the old API in a mailer class. 
More information: http://lindsaar.net/2010/1/26/new-actionmailer-api 

The culprits: 
     - app/models/message_sender.rb 

(IE)它說我還在使用舊API

有人可以解釋我失去了什麼這裏 ?

還有沒有其他方法可以消除「您在郵件類中使用舊API」錯誤?

FYI:寶石被更新和環境是紅寶石1.8.7,軌3.0.6

+0

也許這是因爲你有'app/models'中的郵件程序而不是'app/mailers'? – Lucas 2013-05-01 06:14:38

+0

@Lucas試圖將它移入'app/mailers',但結果相同 – shiva 2013-05-01 06:34:09

回答

1

嘗試丟棄您的代碼並使用ActionMailer guide再次寫入。原因可以像弗雷德裏克所建議的那樣,但是你的代碼看起來並不像軌道3)。

我想到的第一件事就是如何傳遞正文和內容類型。 Body可以是可變的,您可以在視圖中使用,並且內容類型將根據定義的視圖自動設置。

我會寫這樣的:

class MessageSender < ActionMailer::Base 
    def send_message(subject, to, from, body) 
    # @sent_on   = Time.now 
    @body    = body 
    mail(:to => to, :subject => subject, :from => from) 
    end 
end 

然後呈現一個觀點:

# app/views/message_sender/send_message.text.erb 

My nice text email. 
And my body is <%= @body %> 

正如你可以在引導閱讀,你還可以創建HTML版本app/views/message_sender/send_message.text.erb

0

的Rails通過反對它運行一些正則表達式升級檢查你的代碼。這也不是萬無一失的,例如它試圖防範的老式方法來設置主題:

subject "foo" 

但用於檢查將捕字主題後面有一個空格的任何實例的tests(除非用作符號)。既然你有一個參數subject,這很容易發生。 from也是如此。

+0

謝謝!我被吹走了......現在我知道爲什麼會顯示一些不需要的文件 – shiva 2013-05-01 13:03:04