2010-04-01 61 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,將會產生錯誤。