Проблема с url-адресом и именованными маршрутами в представлении ActionMailer: "нужен контроллер и действие"
Я пытаюсь предоставить ссылку подтверждения в моем приветственном письме пользователя, и я получаю следующую ошибку Rails:
Need controller and action!
Он поднимает шум из-за этой строки:
<p>Please take a moment to activate your account by going to:
<%= link_to confirm_user_url(:id => @user.confirmation_code) %>.</p>
В моем окружении development.rb у меня есть следующая строка:
config.action_mailer.default_url_options = {
:host => "localhost", :port => 3000
}
Нет никаких проблем с переменной @user. Я проверил электронную почту с такими вещами, как @user.username и @user.confirmation_code. У меня только проблемы с url_for и названными маршрутами, такими как confirm_user_url.
Когда я проверяю свои маршруты с помощью rake routes, confirm_user появляется, так что это не проблема с именем маршрута не существует.
2 ответа:
Поскольку наличие кликабельного url-адреса-это то, что вы сказали в своем where after в своем комментарии, вот вам macek
<p>Please take a moment to activate your account by going to: <%= auto_link confirm_user_url(:id => @user.confirmation_code) %>.</p>Я использовал
auto_linkпомощник в некоторых из моих почтовых программ, чтобы сделать URL-адреса кликабельными, и это сработало довольно хорошо. Я думаю, что делает адреса электронной почты также, проверить полный api для всех вариантов. Наслаждаться.
ActionMailer не является реальным контроллером Rails, поэтому маршруты недоступны в шаблонах ваших почтовых программ. Для передачи значений в шаблон необходимо настроить переменные экземпляра в классе mailer.
Напр. если ваш почтовый клиент SampleMailer:
class SampleMailer < ActionMailer::Base def confirmation_mail(user) subject 'Confirmation' recipients user.email from 'sample@example.com' sent_on Time.now body :greeting => 'Sample Greeting', :email => user.email, :confirm_user_url => confirm_user_url(:id=>@user.confirmation_code) end endЗатем в шаблоне:
<%= link_to "Confirmation link", @confirm_user_url %>Это объясняется несколько загадочно в api в разделе "ActionMailer", а более подробно в Agile Web Development with Rails, 3-е изд.[10], Глава 25.