【问题标题】:Rails validates_uniqueness_of across multiple columns with case insensitivityRails validates_uniqueness_of 跨越多个不区分大小写的列
【发布时间】:2011-01-13 23:41:57
【问题描述】:

我有一个模型,它有两个字段,我将其称为 first_name 和 last_name,并且我想确保这两者的组合是不区分大小写的唯一的。通过使用这个,我已经成功了一半:

validates_uniqueness_of :first_name, :scope => :last_name

问题是唯一性检查似乎是区分大小写的,尽管the documentation 说默认情况下它应该不区分大小写。所以给定一个现有的记录:

{ :first_name => 'John', :last_name => 'Smith' }

这是允许的:

{ :first_name => 'JOHN', :last_name => 'SMITH' }

以及在名字或姓氏中有任何大小写变化的任何附加记录。为什么允许这些记录?如何在两个字段中同时强制执行不区分大小写的唯一性?

【问题讨论】:

    标签: ruby-on-rails scope case-insensitive validates-uniqueness-of


    【解决方案1】:

    你试过validates_uniqueness_of :first_name, :scope => :last_name, :case_sensitive => false吗?

    documentation says 默认为 true。

    (我认为您提供的链接指向一些过时的文档。IIRC,在过去几年中,默认值确实发生了变化。)

    【讨论】:

    • 你是对的!我被我找到的文档误导了。设置:case_sensitive => false 使它适用于first_name,但它不适用于另一个方向。它仍然会接受{ :first_name => 'John', :last_name => 'SMITH' }。有没有办法让它双向工作?我是否只需包含两个 validates_uniqueness_of 规则并交换字段?
    • 我尝试通过交换两个字段添加另一个验证。它现在将捕获其中一个字段大小写不同的情况,但如果两者都不同,则不会,所以这仍然可以通过:{ :first_name => 'JOHN', :last_name => 'SMITH' }
    • 如果我是你,我会在此时编写一个自定义验证方法。
    • 您应该分享您的自定义验证方法供其他人学习。 :)
    猜你喜欢
    • 2010-10-15
    • 2013-06-23
    • 1970-01-01
    • 2023-01-18
    • 2011-05-12
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多