2010-04-01 45 views
0

我有这个在我的user.rb“成功时失败”:Rails的验证

attr_accessor :old_password 
    def validate 
    unless password.nil? 
     errors.add_to_base("Old password entered incorrect") unless self.valid_password? old_password 
    end 
    end 

我已经OLD_PASSWORD为具有被验证为升级到一个新的密码,然后用电流匹配一个虚拟属性。我的问题是,在正确输入(密码==密码确认和self.valid_password?old_password)后,错误会产生并将我传回到表单。奇怪的部分是数据实际上会在数据库中更新,并且它不会输入错误;虽然它会产生非常相同的错误(“输入的旧密码不正确”)。我究竟做错了什么?

+0

你能格式化你的代码吗? – shingara 2010-04-01 10:25:15

+0

新..不知道如何,但谢谢史蒂夫。 – Fredrik 2010-04-01 10:39:39

+0

用户ctrl-k进行格式化。 – Salil 2010-04-01 10:43:39

回答

0

好的,找到问题了。 我使用了自定义更新的属性,它用来样子:

def custom_update_attributes(userparams, updater) 
    unless updater.may_change_user_role_name? self 
     userparams.delete(:role_name) 
     userparams.delete(:active) 
    end 
    self.update_attributes(userparams) 
    save 
    end 

这里最明显的问题是节约,即使我改变了我的def validatedef validate_on_update此验证已在攒动运行过了,因为没有提供了old_password,将会产生错误。