我的网站已连接到外部vbulletin论坛。 我有自定义用户验证器来检查vbulletin论坛上是否存在用户名,电子邮件。
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
我有非常基本的密码重置功能。最后,用户输入密码和password_confirmation,存储在params[:user]
中。
在控制器中我想用@user.update_attributes(params[:user])
保存它并获得验证'错误1'(因为所有现有用户都有vbulletin帐户,它将始终触发)。
我想只运行has_secure_password验证器,而不运行其他验证器,因为除了密码之外我不会更改任何其他内容。知道我该怎么办? 为什么这个自定义验证器会触发。
答案 0 :(得分:1)
您可以使用changed,changed_attributes和_changed吗?确定哪些字段在更新时已更改。
要检查电子邮件地址是否已更改,您可以执行以下操作:
if email_changed?
...
end
密码可能有点复杂。您可能有一个哈希密码字段,密码和密码确认不是您模型上的实际字段。您可以执行类似操作,查看散列密码是否已更改。