我正在关注Mike Hartl的Rails教程&在创建电子邮件模板时遇到了问题。 (请注意,本教程基于Rails 5.0.1,而我正在使用Rails 5.1.1。)
本教程使用:activation_token & :activation_digest 属性用于处理注册网址的安全风险,:create_activation_digest 挂钩用于在创建用户模型之前设置其值。
这是邮件程序视图模板:
<%= link_to "Activate", edit_account_activation_url(@user.activation_token, email: @user.email) %>
该问题似乎告诉Mailer在路径的:id 字段中使用:activation_token 的值。 (URL定义错误)
这是路线定义,来自rails routes
:
edit_account_activation GET /account_activations/:id/edit(.:format) account_activations#edit
错误反馈:
No route matches {:action=>"edit", :controller=>"account_activations", :email=>"test7@example.com", :format=>nil, :id=>nil}, possible unmatched constraints: [:id]
我在邮件程序模板中尝试过硬编码id:@ user.activation_token,但无济于事。
这看起来很简单,但我很难过,有点担心我忽略了从Rails 5.0.x到5.1.x的过渡中隐藏的东西。有什么想法吗?
答案 0 :(得分:0)
您收到此错误是因为在config/routes.rb
文件中,您获得了/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
,然后通过令牌查找用户。
答案 1 :(得分:-1)
谢谢大家, 但是错误与我在User模型中定义:activation_token挂钩的方式有关。所有测试现在都通过了。