2012-12-19 126 views
1

我试图用password_confirmation以确认更新用户密码更改用户密码。与密码确认

但是,我无法找到一个方法来正确地更新自己的密码,我设置的密码与password=password_confirmation=但是当我看changed?结果,它总是返回false。

如何解决这个问题的任何建议?这里是我的代码(change_password被称为控制器,则params正确传递我看过他们与打印):

class User < ActiveRecord::Base 
    acts_as_authentic 

    belongs_to :organization 

    # Setup accessible (or protected) attributes for your model 
    attr_accessible :email, :password, :organization_id, :note, :role 

    validates :email, :uniqueness => true 
    validates :role, :inclusion => { :in => Rails.configuration.available_roles } 

    def change_password!(pswd) 
    password = pswd 
    password_confirmation = pswd 
    return changed? && save 
    end 

    def change_password(old_pswd, pswd, confirm_pswd) 
    return false, 'Old password is incorrect' if !valid_password?(old_pswd, true) 
    password = pswd 
    password_confirmation = confirm_pswd 
    # update_attributes([user: [password: pswd, password_confirmation: confirm_pswd]]) 
    print "--------- #{old_pswd} #{pswd} #{confirm_pswd} #{changed?.to_s} ------------" 
    return changed? && save, 'New and confirm password are not correcty' 
    end 
end 

回答

4

你需要设置属性(这实际上是“二传手”辅助方法)时使用self. - 否则红宝石认为你正在创建新的局部变量:

self.password = pswd 
self.password_confirmation = pswd 
+0

哦**真的**?!?!这真是奇怪,我不知道这样的事情,但是非常感谢! –