rails mailer生成无效的URL

时间:2012-10-11 20:40:00

标签: ruby-on-rails actionmailer rails-routing railscasts

我正在尝试使用动作邮件程序向我的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的钢轨演员#274

1 个答案:

答案 0 :(得分:1)

这似乎config/routes.rb包含resource :password_resets而不是resources :password_resets。作为singular resource,这会向edit_password_resets添加/password_resets/edit(.:format)路由。将值传递到edit_password_resets_url会映射到edit.<value>,与您描述的症状一致。

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