Проблема с 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.