0

我是 Rails 新手,我想为用户提供在其用户页面中更改密码的功能。要求他们的旧密码并设置一个新密码。但是,我不知道如何做到这一点。

Railscasts 有一个关于通过电子邮件重置密码的插曲,但我不想用电子邮件这样做。

我生成了一个密码更新控制器。但我知道我犯了一个可怕的错误。希望大家能指出来。希望这个问题不会太令人困惑。

密码更新控制器

  class PasswordUpdateController < ApplicationController
  def new
  end

  def update
  end

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

新密码_更新

 %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"

路线.rb

TootApp::Application.routes.draw 做

获取“会话/新”

获取“静态页面/主页”

获取“静态页面/帮助”

获取“密码更新/新”

资源:会话

资源:产品

资源:照片

资源:密码更新

4

1 回答 1

3

这不是你应该使用控制器的方式。密码更新应该是“控制器”中的“操作”,当涉及到用户凭据时,该控制器应该正确地位于用户控制器中,其中“更新”操作接收您从表单发布的参数:

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 :)

并确保正确设置您的“路线”,如下所示:

resources :users

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

rake routes

除了连接您自己的用户凭证管理功能之外,何不试试 Jose Valim 的 devise gem,并将其与 SimpleForm gem 配对。

希望这可以帮助!

于 2013-06-17T03:03:07.467 回答