2012-05-01 103 views
0

我有一個Rails應用程序(Postgres),我想添加基於多個參數的驗證。幾個(聚合)列的Rails唯一性?

如果

Object.column1 & Object.column2 are NOT unique => reject new entry. 

但如果

Object.column1 IS not unique BUT Object.column2 for duplicate entry is different => accept new entry 

什麼是做到這一點的最好方法是什麼?

回答

0

您可以將範圍添加到您的唯一性約束。然後它只會檢查整組列是否是唯一的。

validates_uniqueness_of :column1, :scope => :column2 

欲瞭解更多信息請參閱the documentation

+0

這實際工作,謝謝 – Stpn

0

不太知道:範圍將解決你的問題,或者你也可以寫自己的驗證樣

validate :custom_validation 

def custom_validation 
    self.errors.add(:column, MESSAGE) if YOUR VALIDATION LOGIC fails 
end 
0

我認爲這是

class User 
    validates :first_name, :uniqueness => true, :scope => [:last_name] 
end 

您還可以創建唯一索引,並且數據庫將強制唯一性。

add_index :users, [:last_name, :first_name], :unique => true 
0

這也可能是更安全的使用遷移到唯一索引添加到執行該檢查在數據庫級[列1,列2]和[列2]是這樣的:

add_index :model_name, [:column1, :column2], :unique=>true 
add_index :model_name, :column2, :unique=>true