我正在使用rails进行身份验证,并希望验证用户名的唯一性,除非将其他用户名设置为临时帐户。
实施例: 我们设置了一个名为“buddy”的用户帐户,其中包含电子邮件:“placeholder@email.com”
用户来创建一个帐户。如果唯一的其他好友帐户与电子邮件相关联,我们希望用户能够使用“好友”这个名称:“placehoder@gmail.com”。
基本上我想做一些事情:
validates_uniqueness_of :name, unless: User.where(name: :name).first.email.include?("placeholder@email.com")
这样做的正确方法是什么?
答案 0 :(得分:1)
您可以将Proc传递给除非:选项,如此...
validates_uniqueness_of :name, unless: Proc.new { |user| User.where(name: user.name).first && User.where(name: user.name.first.email.include?(user.email) }
答案 1 :(得分:0)
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