1

我的网站已连接到外部 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

我有非常基本的密码重置功能。在最后一步,用户输入密码和密码确认,它们存储在params[:user]. 在控制器中,我想保存它@user.update_attributes(params[:user])并获得验证“错误 1”(因为所有现有用户都有 vbulletin 帐户,它总是会触发)。

我只想运行 has_secure_password 验证器,而没有其他验证器,因为除了密码我什么都不更改。知道我该怎么做吗?以及为什么会触发此自定义验证器。

4

1 回答 1

1

你可以使用changed、changed_attributes和_changed吗?确定哪些字段在更新时发生了变化。

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

if email_changed?
  ...
end

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

于 2013-03-18T19:57:01.390 回答