Rails validates_uniqueness_of除非自我验证

时间:2014-08-13 20:32:23

标签: ruby-on-rails validates-uniqueness-of

我正在使用rails进行身份验证,并希望验证用户名的唯一性,除非将其他用户名设置为临时帐户。

实施例: 我们设置了一个名为“buddy”的用户帐户,其中包含电子邮件:“placeholder@email.com”

用户来创建一个帐户。如果唯一的其他好友帐户与电子邮件相关联,我们希望用户能够使用“好友”这个名称:“placehoder@gmail.com”。

基本上我想做一些事情:

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

这样做的正确方法是什么?

2 个答案:

答案 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