0

我正在尝试使用操作邮件向我的 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

4

1 回答 1

1

这似乎是config/routes.rbcontainsresource :password_resets而不是resources :password_resets. 作为单一资源,这将添加edit_password_resets一条到/password_resets/edit(.:format). 将值传递给edit_password_resets_url将映射到edit.<value>,与您描述的症状一致。

将其更改为resources :password_resets应该可以解决问题。它还将路由重命名为edit_password_reset-- 单数,因为它适用于成员,而不是适用于集合的复数。

于 2012-10-11T21:00:24.910 回答