Rails - 如何重置密码(无需电子邮件确认)

时间:2013-06-17 02:46:26

标签: ruby-on-rails ruby-on-rails-3

我是rails的新手,我想为用户提供更改用户页面密码的功能。需要他们的旧密码并设置一个新密码。但是,我不知道如何实现这一目标。

有一个关于通过电子邮件重置密码的Railscasts剧集,但我不想用电子邮件来完成。

我生成了一个密码更新控制器。但我知道我犯了一个可怕的错误。希望你们能指出来。希望这个问题不会太混乱。

密码更新控制器

  class PasswordUpdateController < ApplicationController
  def new
  end

  def update
  end

  def show
    @user = User.find(params[:id]) 
  end
  end

new password_update

 %h1
 = form_for @user, :url => password_update_path(params[:id]) do |f|
   .field
     = f.label :old_password
     = f.password_field :password
   .field
     = f.label :password
     = f.password_field :password
   .field
     = f.label :password_confirmation
     = f.password_field :password_confirmation
   .actions
     = f.submit "Update Password"
  

路由错误没有路由匹配[POST]“/ password_update / 1”

的routes.rb

  

TootApp :: Application.routes.draw做

     

获取“sessions / new”

     

获取“static_pages / home”

     

获取“static_pages / help”

     

获取“password_updates / new”

     

资源:会话

     

资源:产品

     

资源:照片

     

资源:password_update

1 个答案:

答案 0 :(得分:3)

那不是你应该如何使用控制器。密码更新应该是一个&#39;动作&#39;在一个&#39;控制器内当涉及到用户凭据时,该控制器应该正确地位于UsersController中,其中更新了&#39; action接受您从表单发布的参数:

class UsersController < ApplicationController
  def update
    @user = User.find(params[:id])
    @user.update_attributes(params[:user])
    ....
  end
end

在HTML表单中,您只需指定:

= form_for @user do |f|
  ...

甚至不需要指定URL,因为rails会隐式在后台为您提供正确的URL:)

并确保拥有您的路线&#39;正确设置如下:

resources :users

它基本上为用户设置了RESTful路由。您可以通过在控制台中运行以下命令找到它生成的路由:

rake routes

除了连接自己的用户凭据管理功能外,为什么不试试Jose Valim的设计宝石,并将其与SimpleForm gem配对。

希望这有帮助!