【问题标题】:Cannot find a valid mapping for user#id which is causing a runtime error?找不到导致运行时错误的 user#id 的有效映射?
【发布时间】:2014-09-05 13:10:55
【问题描述】:

我正在尝试按照Railscast Reset password tutorial 上的教程为我的应用程序设置重置密码,并且在单击邮件中的重置密码链接后一切顺利,直到最后一步,所以当我更新密码时它告诉“RuntimeError in PasswordResetsController#update" 由于“找不到有效的映射#

您可以在下面的屏幕截图中更详细地查看错误。而且我在尝试将reset_password迁移到用户表时在进程开始时遇到迁移错误,它说remember_token表已经存在所以跳过它,你认为它与错误有什么关系。

真的很想知道我做错了什么,谢谢你... [可惜我的名声不够高,不能发图片,所以我已经按顺序发布了图片的链接,不要介意。]

【问题讨论】:

  • 它会在sign_in @user 上引发吗?我看不出究竟是哪里引发了错误
  • 好吧,当我重置密码时,当它调用 sign_in @user 时,它会显示此错误说,用户无法映射到代表令牌的有效用户
  • 我猜,sign_in 方法有问题。它是宝石“设计”的方法吗?还是你的?
  • 再次正确执行所有步骤。在剧集中,您没有任何 sign_in 方法。设计中存在这种重置密码。但你没有使用它。此外,您正在使用 remember_token 这在您关注的剧集中也不存在。尝试一次遵循一种方法。
  • 就像应用程序基础是建立在 michael hartl 教程上的,过去它确实有效,但很久以前,不知道哪里出了问题。因此,它混合了二,但是认证方式差不多吧。

标签: ruby-on-rails ruby-on-rails-3.2


【解决方案1】:

将重置密码的链接设为

localhost:3000/password_resets?remember_token=abcdefghikfhgj

在password_resets_controller.rb:-

def edit
  @user = User.find_by_remember_token(params[:remember_token])
end

def update
  @user = User.find_by_remember_token(params[:remember_token])
  #other codes
end

【讨论】:

  • 当我这样做时,我在 PasswordResetsController#edit 中收到错误 ActiveRecord::RecordNotFound,说“找不到具有 remember_token = 的用户”
  • 在控制台中检查 remember_token 值是否存在并且与 url 中传递的相同
  • 我已经在控制台中检查了链接仍然是“localhost:3000/password_resets/Sfmx0a95rxi2C2h4xsnuzQ/edit”,不像你之前建议的那样,不,它不是只显示“localhost:3000/password_resets/4/edit”的令牌,即使当我放置带有令牌的链接时,它显示相同的错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-25
  • 1970-01-01
相关资源
最近更新 更多