我是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
答案 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配对。
希望这有帮助!