2012-07-09 56 views
2

有沒有一種方法來驗證同一模型中兩個或多個字段的唯一性?例如,假設我的字段爲:name:zip。可以接受的設置爲{[name1, zip1], [name1, zip2]},但不能在同一個表中有{[name1,zip1],[name1,zip1]}在同一個表軌模型中有兩個字段的唯一性

有沒有可以使用的導軌validates方法?

回答

2

你應該使用scope

validates_uniqueness_of :name, :scope => [:zip] 

有關更多信息,請參見documentationguide

您可以使用:scope選項指定用於限制唯一性檢查的其他屬性。

+0

隱而不宣」這是否意味着名稱不能相同? – locoboy 2012-07-09 07:42:17

+1

:姓名和:zip同時不能相同。 – tiktak 2012-07-09 07:44:15

+0

「您可以使用:scope選項指定用於限制唯一性檢查的其他屬性。」有點不清楚。限制是否意味着它使屬性包含唯一性? – locoboy 2012-07-09 08:54:31

2

另一種方式

validates :name, :uniqueness => {:scope => [:zip]} 
2

爲此,您可以使用驗證像別人告訴你,但你也可以添加一個唯一索引表。這將防止在數據庫層上插入重複項並提高選擇速度。您需要創建爲rails g migration addUniqueIndexForZipAndNameToTablename

add_index :tablename, [:name, :zip], :unique => true 

你可能會得到唯一的問題是,有MySQL的錯誤,當您嘗試插入你需要避免重複一個新的遷移,使用

begin 
    # insert,... 
rescue ExceptionHere 
    # do sth... 
end 
相關問題