有沒有一種方法來驗證同一模型中兩個或多個字段的唯一性?例如,假設我的字段爲:name
和:zip
。可以接受的設置爲{[name1, zip1], [name1, zip2]}
,但不能在同一個表中有{[name1,zip1],[name1,zip1]}
。在同一個表軌模型中有兩個字段的唯一性
有沒有可以使用的導軌validates
方法?
有沒有一種方法來驗證同一模型中兩個或多個字段的唯一性?例如,假設我的字段爲:name
和:zip
。可以接受的設置爲{[name1, zip1], [name1, zip2]}
,但不能在同一個表中有{[name1,zip1],[name1,zip1]}
。在同一個表軌模型中有兩個字段的唯一性
有沒有可以使用的導軌validates
方法?
你應該使用scope
:
validates_uniqueness_of :name, :scope => [:zip]
有關更多信息,請參見documentation和guide。
您可以使用:scope
選項指定用於限制唯一性檢查的其他屬性。
另一種方式
validates :name, :uniqueness => {:scope => [:zip]}
爲此,您可以使用驗證像別人告訴你,但你也可以添加一個唯一索引表。這將防止在數據庫層上插入重複項並提高選擇速度。您需要創建爲rails g migration addUniqueIndexForZipAndNameToTablename
add_index :tablename, [:name, :zip], :unique => true
你可能會得到唯一的問題是,有MySQL的錯誤,當您嘗試插入你需要避免重複一個新的遷移,使用
begin
# insert,...
rescue ExceptionHere
# do sth...
end
隱而不宣」這是否意味着名稱不能相同? – locoboy 2012-07-09 07:42:17
:姓名和:zip同時不能相同。 – tiktak 2012-07-09 07:44:15
「您可以使用:scope選項指定用於限制唯一性檢查的其他屬性。」有點不清楚。限制是否意味着它使屬性包含唯一性? – locoboy 2012-07-09 08:54:31