2013-03-18 92 views
1

我的網站已連接到外部vbulletin論壇。 我有自定義用戶驗證器來檢查用戶名,電子郵件是否存在於vbulletin論壇上。用戶重置密碼時僅運行密碼/ password_confirmation驗證

validate :check_if_forum_user_exists 

def check_if_forum_user_exists 
    if Vbuser.find_by_email(email.downcase) 
    errors.add(:email, "error 1") 
    end 

    if !Vbuser.find(:all, conditions: ["lower(username) = lower(?)",name]).empty? 
    errors.add(:name, "error 2") 
    end 
end 

我有非常基本的密碼重置功能。在結束步驟中,用戶輸入存儲在params[:user]中的密碼和password_confirmation。 在控制器中,我想用@user.update_attributes(params[:user])保存並獲得驗證「錯誤1」(因爲所有現有用戶都有它會始終觸發的vbulletin帳戶)。

我想只運行has_secure_password驗證器,沒有其他人,因爲我不改變任何東西,但密碼。任何想法我怎麼能做到這一點? 爲什麼這個自定義驗證器觸發。

回答

1

您可以使用changed,changed_attributes和_changed?以確定哪些字段在更新時發生了變化。

要檢查如果電子郵件地址發生了變化,你可以這樣做:

if email_changed? 
    ... 
end 

密碼可能會有點複雜。您可能有一個散列密碼字段,密碼和密碼確認不是您模型上的實際字段。你可以做類似的事情來查看哈希密碼是否已經改變。