Rails validates_uniqueness_of с, если проверка на себя

Я использую рельсы для аутентификации и хочу проверить уникальность имени пользователя, если другое имя пользователя не было настроено как временная учетная запись.

Пример: мы создали учетную запись пользователя с именем "buddy" и электронной почтой: "placeholder@email.com"

Пользователь приходит и создает учетную запись. Мы хотим, чтобы пользователь мог использовать имя "приятель", если единственная другая учетная запись собеседника связана с электронной почтой: "placehoder@gmail.com".

В основном я хочу сделать что-то вроде:

validates_uniqueness_of :name, unless: User.where(name: :name).first.email.include?("placeholder@email.com")

Как правильно это сделать?

2 ответа

Решение

Вы можете передать Proc в параметр unknown: например, так...

validates_uniqueness_of :name, unless: Proc.new { |user| User.where(name: user.name).first && User.where(name: user.name.first.email.include?(user.email) }
validates_uniqueness_of :name, conditions: -> {where.not(email: "placeholder@email.com")}

Это сгенерирует запрос как

SELECT 1 AS one FROM "users"
  WHERE ("users"."name" = 'buddy') AND
        ("users"."email" != 'placeholder@email.com')
  LIMIT 1
Другие вопросы по тегам