14

我有一个模型有两个字段,我将调用first_name和last_name,并且我想确保两者的组合不区分大小写。我已经得到了一半的用这样的:Rails validates_uniqueness_of跨多个列不区分大小写

validates_uniqueness_of :first_name, :scope => :last_name 

的问题是,唯一性检查似乎是大小写敏感的,即使the documentation说,这应该是案件在默认情况下不区分大小写。因此,考虑现有的记录:

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

这将被允许:

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

除了那里是在第一个或最后一个名字案件的任何变化的任何其他记录。为什么这些记录被允许?我怎样才能在两个领域实施不区分大小写的唯一性?

回答

21

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

documentation says默认情况下为true。

(我想你给的链接是一些过时的文档。IIRC,默认为这的确在过去几年中的变化。)

+0

你说得对!我被我发现的文档误导了。设置':case_sensitive => false'使它适用于first_name,但它不适用于其他方向。它仍然会接受'{:first_name =>'John',:last_name =>'SMITH'}'。有没有办法使其双向工作?我只需在交换字段中加入两个'validates_uniqueness_of'规则? – 2010-02-07 00:00:23

+0

我试着添加另一个验证两个字段交换。它现在将捕获其中一个字段是不同的情况,但如果两者都不是,那么这仍然会通过:{:first_name =>'JOHN',:last_name =>'SMITH'}'。 – 2010-02-07 00:10:38

+1

如果我是你,我现在只是写一个自定义验证方法。 – 2010-02-07 00:26:11