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