2013-03-18 61 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 

密码可能会有点复杂。您可能有一个散列密码字段,密码和密码确认不是您模型上的实际字段。你可以做类似的事情来查看哈希密码是否已经改变。