我正在尝试在用户欢迎电子邮件中提供确认链接,我收到以下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
,因此不存在命名路线不存在的问题。
我似乎无法弄明白。是什么给了什么?
答案 0 :(得分:9)
ActionMailer不是真正的Rails控制器,因此您的邮件程序模板中不提供路由。您需要在邮件程序类中设置实例变量,以便将值传递给模板。
例如。如果你的邮件是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 %>
“ActionMailer”部分的api更详细地解释了这一点,第25章Agile Web Development with Rails, 3rd Ed.更详细地解释了这一点。
答案 1 :(得分:3)
由于您的评论中有一个可点击的网址就是您所说的,所以请点击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
帮助程序来使网址可以点击,而且效果非常好。我认为这也是电子邮件地址,请查看所有选项的完整API。享受。