我正在尝试将应用程序从rails 2.3升级到3.0.6
在rails 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
在升级过程中,代码修改如下
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
参考这个着名的blog关于在rails 3.0中使用ActionMailer
最后运行rake rails:upgrade:check
(检查rails 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
(即)它说我还在使用旧API
有人可以解释我在这里缺少什么吗?
或者还有其他方法可以消除“你在邮件程序类中使用旧API”的错误吗?
仅供参考:宝石更新,环境为红宝石1.8.7,rails 3.0.6
答案 0 :(得分:1)
尝试抛弃您的代码并使用ActionMailer guide再次编写代码。原因可能是弗雷德里克建议的那样,但你的代码看起来并不像3轨道。)。
我想到的第一件事就是你如何传递身体和内容类型。正文可以是变量,您将在视图中使用,内容类型将根据定义的视图自动设置。
我会写一些类似的东西:
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
。
答案 1 :(得分:0)
Rails升级通过对其运行一些正则表达式来检查您的代码。这不是万无一失的,例如它试图防止设置主题的旧式方式:
subject "foo"
但用于检查的tests将捕获单词subject的后跟空格的任何实例(用作符号时除外)。由于您有一个参数调用subject
,这很容易发生。 from
也是如此。