Rails 5.1邮件错误 - 模板中的帐户激活参数

问题描述:

我正在关注Mike Hartl的Rails教程&在创建电子邮件模板时遇到了问题。 (请注意:本教程是基于on Rails的5.0.1,而我使用Rails 5.1.1春耕提前。)Rails 5.1邮件错误 - 模板中的帐户激活参数

本教程使用:activation_token & :activation_digest属性来处理注册的安全隐患URL和:create_activation_digest挂钩在创建用户模型之前设置它们的值。

这里的邮件视图模板:

<%= link_to "Activate", edit_account_activation_url(@user.activation_token, email: @user.email) %>

的问题似乎是在告诉梅勒使用的值:在activation_token:路由的ID领域。 (A URL定义错误)

,路线如下定义,从rails routes

edit_account_activation GET /account_activations/:id/edit(.:format) account_activations#edit 

错误反馈:

No route matches {:action=>"edit", :controller=>"account_activations", :email=>"[email protected]", :format=>nil, :id=>nil}, possible unmatched constraints: [:id] 

我试着硬编码ID:@ user.activation_token在邮件模板,无济于事。

这似乎是一个容易的,但我很难过,有点担心,我忽略了从Rails 5.0.x到5.1.x的过渡中隐藏的东西。有任何想法吗?

+0

请检查'@ user.activation_token'是否为零? –

您会收到此错误消息,因为在您的config/routes.rb文件中,您GET /account_activations/:id/edit。这就需要发送一个你不想/不需要的ID。现在我知道Rails Tutorial使用:id作为标记。但是你并没有在你的链接中定义id:。因此,无论您需要更改路线还是更改链接。

<%= link_to "Activate", edit_account_activation_url(id: @user.activation_token, email: @user.email) %> 

通知我定义了id:。通常在本教程之外,您应该考虑将您的路线更改为GET /account_activations/edit/:token,然后通过令牌查找用户。

谢谢大家, 但是,错误与我如何在用户模型中定义:activation_token挂钩有关。现在所有测试都通过了

+0

嗨,布赖恩,你还记得你做错了什么,因为我面临同样的问题。谢谢。 – OnlySteveH