我有一个包含用户名和电子邮件的用户模型。目前,该电子邮件用于登录,但我希望用户也能够使用他们的用户名登录。为了做到这一点,我必须确保一个用户的用户名与另一个用户的用户名不同,反之亦然。
我对每个字段的唯一性验证工作正常,但我无法通过列进行验证。
我的验证如下:
validates(:username, presence: true, length: { maximum: 25 }, uniqueness: {case_sensitive: false })
validates(:username, uniqueness: {scope: :email, case_sensitive: false});
并且
validates(:email, presence: true, length: { maximum: 255 },
format: {with: VALIDATE_EMAIL_REGEX}, uniqueness: { case_sensitive: false })
validates(:email, uniqueness: {scope: :username, case_sensitive: false})
如何验证这两列的唯一性? 任何帮助表示赞赏。
答案 0 :(得分:1)
如何验证这两列的唯一性?
您可以编写自定义验证方法:
validate :uniq_username_and_email
private
def uniq_username_and_email
self.errors.add(:username, 'already taken') if User.exists?(email: username)
self.errors.add(:email, 'already taken') if User.exists?(username: email)
end
假设您的模型名为User