【发布时间】:2012-10-11 20:40:00
【问题描述】:
我正在尝试使用 action mailer 将密码重置功能添加到我的 rails 应用程序。除了生成的重置密码链接不正确外,一切似乎都运行良好。
这里是文件:
File user_mailer.rb:
class UserMailer < ActionMailer::Base
default from: "from@example.com"
def password_reset(user)
@user = user #make the user available in mailer template
mail :to => user.email, :subject => "Password Reset"
end
end
File password_reset.text.erb 包含以下链接:
<%= edit_password_resets_url(@user.password_reset_token) %>
当我获得电子邮件和令牌值时,我可以看到用户变量已正确传递。但是,邮件程序中生成的 URL 如下所示:
http://localhost:3000/password_reset/edit.jo_jYhkjsdjskjdskYHJSDA
但是,期望值是这样的
http://localhost:3000/password_resets/jo_jYhkjsdjskjdskYHJSDA/edit
在routes.rb中有以下内容
resource :password_resets
另外,rake 路由显示如下:
edit_password_resets GET /password_resets(.:format) password_resets#edit
可能出了什么问题?
注意:我正在关注 Ryan bates 的 rails casts #274
【问题讨论】:
-
在 routes.rb 中包含
resource :password_resets。也更新问题 -
将其更改为
resources :password_resets会发生什么? (请参阅路由指南中的Singular resources。)另外,请注意Devise 几乎是“用户需要身份验证”问题的标准解决方案。 -
像你这样的宁静路线需要一个 id,而不是一个令牌
-
@willglynn,这似乎是问题所在,当我更新到
resources时,它开始显示我以错误方式更改的其他问题。修复它们。最终想开始设计,但才刚刚开始,因此想在加入插件之前先练习一下.. -
willglynn,这是问题并已修复。请将其发布为答案并将接受。 @apneadiving,这是真的,在这种情况下,这被视为 id
标签: ruby-on-rails actionmailer rails-routing railscasts