2010-10-28 73 views
3

我希望能夠將條目放入我的數據庫中,製造商將被多次表示,但不是製造商和型號的相同組合。 所以「索尼(製造商),電視(模型)」是好的「索尼(製造商),其他(模型)」,但第三項「索尼(製造商),電視(型號)」是不好的,因爲製造商和模型不是唯一的。我嘗試了:key => true驗證,但它似乎沒有工作。我不能做像validates_uniqueness_of :manufacturer AND :model這樣的事情。你是怎麼做到的?驗證DataMapper中組合字段的唯一性

class Tvs 
    include DataMapper::Resource 

    property :id,   Serial 
    property :manufacturer, String, :key => true 
    property :model,  String, :key => true 

    validates_uniqueness_of : 
end 

回答

5

實際上,你可以一起去:

​​

這也將讓您在數據庫中唯一索引。

+0

很酷。謝謝。所以這會給我一個名爲manufacturer_model的數據庫中的新列或什麼? – schwift 2010-11-07 18:45:54

+0

不是列,而是unique_index。稱爲'unique_tvs_manufacturer_model'或類似的東西,並在兩列。 – namelessjon 2010-11-07 19:16:57

0

沒關係。 看來這做的工作:

class Tvs 
    include DataMapper::Resource 

    property :id,   Serial 
    property :manufacturer, String, :unique_index => true 
    property :model,  String, :unique_index => true 

    validates_uniqueness_of :model, :scope => :manufacturer 
end 
0
class Tvs 
    include DataMapper::Resource 

    property :id,   Serial 
    property :manufacturer, String, :unique_index => :manufacturer_model 
    property :model,  String, :unique_index => :manufacturer_model 

    validates_is_unique :model, :scope => :manufacturer 
end 

我需要修改示例以使用「validates_is_unique」來使其工作。

0

如果您刪除property :id Serial這一行,最終將出現一個組合鍵(製造商,型號),不允許特定製造商使用重複的型號。