用户重置密码时仅运行password / password_confirmation验证

时间:2013-03-18 19:50:50

标签: ruby-on-rails ruby-on-rails-3

我的网站已连接到外部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验证器,而不运行其他验证器,因为除了密码之外我不会更改任何其他内容。知道我该怎么办? 为什么这个自定义验证器会触发。

1 个答案:

答案 0 :(得分:1)

您可以使用changed,changed_attributes和_changed吗?确定哪些字段在更新时已更改。

要检查电子邮件地址是否已更改,您可以执行以下操作:

if email_changed?
  ...
end

密码可能有点复杂。您可能有一个哈希密码字段,密码和密码确认不是您模型上的实际字段。您可以执行类似操作,查看散列密码是否已更改。