2012-02-19 84 views
0

我想通過給定的重複次數驗證唯一性,例如允許三個具有相同名稱的用戶。Rails驗證重複的唯一性

User id: 1, name: "user" 
User id: 2, name: "user" 
User id: 3, name: "user" 

但是,您不能創建具有相同名稱的第四個用戶。我該怎麼辦:

  1. 用params創建validates_uniqueness_of?
  2. 或者創建自定義驗證?

我將不勝感激例子。

+0

我認爲你必須圍繞'id'循環,並檢查該用戶名的存在數量,並確認像'exists == 3'類似的東西那。 – uday 2012-02-19 06:00:23

回答

3

你需要一個自定義的驗證,如

validates :validate_three_maximum 

def validate_three_maximum 
    if User.where(:name => "user").count >= 3 && (new_record? || name_changed?) 
    errors.add(:name, "Maximum of 3 with this name") 
    end 
end 

要知道,在你的應用程序數據庫唯一性檢查是容易出現競爭情況:見Concurrency and Integrity

編輯:添加new_record? + name_changed?檢查更新記錄不會計入3.

+0

良好的捕獲,更新。 – bdon 2012-02-19 06:37:21

+0

也添加了。 – bdon 2012-02-19 06:49:19