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

时间:2017-05-30 23:01:02

标签: ruby-on-rails email

我正在关注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的过渡中隐藏的东西。有什么想法吗?

2 个答案:

答案 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挂钩的方式有关。所有测试现在都通过了。