gpt4 book ai didi

grails - Grails 中不区分大小写的唯一约束

转载 作者:行者123 更新时间:2023-12-04 16:37:24 29 4
gpt4 key购买 nike

我如何基本上对字符串数据类型字段执行唯一约束。

class User{
String username
String Email

static hasMany = [roles:Roles]

static constraints = {
Email(email:true)
username(unique:true)

}
}

有没有简单的实现方式 username(unique: true)
或者我必须使用 .findByNameLike 之类的方法手动检查数据库?

用户名应该是唯一的,但唯一性应该是不区分大小写的。

最佳答案

因此,如果您想拥有唯一且不区分大小写的用户名,有两种可能的方法。
简单的一个:

  • 将它们存储为大写或小写并使用唯一约束。

  • 或者,关于性能,更昂贵:
  • 将它们混合存放并使用 custom validator ,它通过比较给定的和现有的用户名不区分大小写来检查数据库。

  • 现在这取决于,如果您只是想让用户在他想要的情况下自由输入他的用户名(第一种可能性),或者您想保留用户名以显示原因(第二种可能性)。
    您的问题听起来像第二个问题,因此自定义验证器如下所示:
    class User { 
    String username
    String email

    static hasMany = [roles:Roles]
    static constraints = {
    email(email:true)
    username(validator: {
    return !User.findByUsernameILike(it)
    })
    }
    }
    希望有帮助。
    [编辑]
    正如 Heinrich 在他的评论中所说,当用户能够更改他们的用户名时,上面的验证器会导致问题。
    快速而肮脏,但我认为这可以解决问题:
    username(validator: { val, obj ->
    def similarUser = User.findByUsernameILike(val)
    return !similarUser || obj.id == similarUser.id
    })
    请注意,它没有经过测试,我不确定您是否能够在验证器中定义变量。
    元:我永远不会让用户更改他们的用户名 ;)

    关于grails - Grails 中不区分大小写的唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2537806/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com