【问题标题】:Rails validates_uniqueness_of with unless validation on selfRails validates_uniqueness_of with 除非对自身进行验证
【发布时间】:2014-08-13 20:32:22
【问题描述】:

我正在使用 rails 进行身份验证,并且想要验证用户名的唯一性,除非将另一个用户名设置为临时帐户。

示例: 我们设置了一个用户帐户,其名称为:“buddy”,电子邮件为:“placeholder@email.com”

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

基本上我想做一些事情:

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

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

【问题讨论】:

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


    【解决方案1】:

    您可以将 Proc 传递给 unless: 选项,就像这样...

    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,除非:Proc.new { |user| User.where(name: user.name).first && User.where(name: user.name).first.email.include?("placeholder@gmail.com")}
    • 啊,哇,"placeholder@gmail.com" 是字面意思!我没有掌握第一次阅读。无论如何,很高兴它有所帮助。
    【解决方案2】:
    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-02
      • 1970-01-01
      • 1970-01-01
      • 2015-10-03
      • 1970-01-01
      相关资源
      最近更新 更多