Обновление Rails 3 - Вы используете старый API в почтовом классе
Я пытаюсь обновить приложение с rails 2.3 до 3.0.6
который имеет следующий код в рельсах 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
ссылаясь на этот знаменитый блог об использовании ActionMailer в rails 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
(то есть) он говорит, что я все еще использую старый API
Может кто-нибудь объяснить, что мне здесь не хватает?
Или есть какой-то другой способ устранить ошибку "Вы используете старый API в классе почтовой программы"?
К вашему сведению: обновлены драгоценные камни и среда ruby 1.8.7, рельсы 3.0.6
2 ответа
Попробуйте выбросить свой код и написать его снова, используя руководство по ActionMailer. Причиной может быть то, что предложил Фредерик, но ваш код выглядит не очень рельсово;).
Первое, что приходит мне в голову, это как вы передаете тело и тип контента. Тело может быть просто переменной, которую вы будете использовать в представлении, и тип содержимого будет устанавливаться автоматически в зависимости от того, какие представления определены.
Я бы написал что-то вроде:
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
,
Обновление Rails проверяет ваш код, выполняя некоторые регулярные выражения для него. Это не надежно, например, он пытается защититься от старого способа установки объекта:
subject "foo"
Но тесты, используемые для проверки этого, поймают любой экземпляр слова subject, за которым следует пробел (кроме случаев, когда он используется в качестве символа). Так как у вас есть вызов аргумента subject
это может легко случиться. То же самое относится и к from
,