2013-07-21 37 views
0

我是RoR的新手。使用validates_uniqueness_of時我遇到了一個問題。我有一個表3列:Rails 3 validates_uniqueness_of以意想不到的方式工作

name  || father_name || dob 
Vimal Raj || Selvam  || 1985-08-30 

我在我的模型已經一個這樣的代碼:

class Candidate < ActiveRecord::Base 
    attr_accessible :dob, :father_name, :name 
    validates_uniqueness_of :name, scope: [:father_name, :dob], case_sensitive: false, 
          message: ": %{value} already present in the database!!!" 
    before_save :capitalize_name, :capitalize_father_name 

    private 

    def capitalize_name 
     self.name.capitalize! 
    end 

    def capitalize_father_name 
     self.father_name.capitalize! 
    end 
end 

當我插入=>「VIMAL拉吉,Selvam預期它會拋出錯誤, 「1985-08-30」 但它正在接受以下數據=>「Vimal Raj,selvam,1985-08-30」。我期待它會拋出一個錯誤,但意外的是它接受記錄並作爲新記錄插入到數據庫中。

請幫我解決這個問題。

+0

無論如何,範圍似乎區分大小寫 - 不區分大小寫似乎隻影響':name'的唯一性問題,而不影響範圍。我不確定我會打電話給那些令人驚訝的事情,但是有辦法做到這一點很好。 –

+0

請先編輯你的問題,上面寫過你的表中有字段名,first_name和dob,而不是father_name。 –

+0

我很抱歉Rails Guy。我編輯了我的問題。 –

回答

2

如果你想要一個班輪解決方案,請試試這個:

before_validation lambda {self.name.capitalize!; self.father_name.capitalize!} 

希望,它將幫助。

+0

工作就像一個魅力。謝謝Rails Guy。 –

1

我認爲case_sensitivity只匹配名稱,而不匹配father_name。我會嘗試將before_save更改爲before_validation,以便在評估驗證時name和father_name的大小寫保持一致。

相關問題