1

我有这个问题 - 我需要创建一个页面,用户可以通过提供他的当前密码来更改他的密码。对于这个页面我需要,对于其他 - 不。

我遵循了这个https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-edit-their-password - 我想使用解决方案 #3

我创建了新的控制器并添加了适当的东西。

这是我的控制器:

class EditUserController < ApplicationController
  before_filter :authenticate_user!


def edit_password
 @user = current_user
end

def update_password
 @user = User.find(current_user.id)
 if @user.update_with_password(params[:user])
  # Sign in the user by passing validation in case his password changed
  #sign_in @user, :bypass => true//commented this, because when I'm entering current_password
  #redirect_to root_path         //it just redirects me to root_path
  redirect_to root_path
 else
   render "edit_password"
 end
end

end

注册控制器

def update
 self.resource = resource_class.to_adapter.get!(send(:"current_#{resource_name}").to_key)

 params[:user].delete(:password) if params[:user][:password].blank?
 params[:user].delete(:password_confirmation) if params[:user][:password_confirmation].blank?

 if resource.update_attributes(params[resource_name]) 
  set_flash_message :notice, :updated if is_navigational_format?
  sign_in resource_name, resource, :bypass => true
  respond_with resource, :location => after_update_path_for(resource)
 else
  clean_up_passwords(resource)
  redirect_to :back
 end

结束和我来自edit_password.html.erb的代码

 <%= form_for(@user, :url => { :action => "update_password" }, :method => :put) do |f| %>   
   <%= devise_error_messages! %>
  ...other fields...
  <% end %>

和路线:

     match "/edit_password", to: 'edit_user#edit_password'
     put "edit_user/update_password"

但是当我提交表格时 - 什么都没有改变。没有错误,只是将我重定向到

      edit_user/update_password

我该如何解决这个问题?我做错了什么?

4

0 回答 0