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