2014-12-13 78 views
0

我創建Rails模型,我會做出多態關聯。在遷移中,我有以下索引,並希望這些列是唯一在一起。我讀過,你可以使專欄獨一無二,但我想確保我明白這意味着什麼。Rails遷移獨特的列在一起

add_index :addresses, [:addressable_type, :addressable_id], :unique => true 

比方說addressable_id是在兩種情況下等於1,但一類是a,另一個是b。這不會違反獨特的要求,對吧?我想確保這兩個列都考慮確定唯一性。我是否正確理解這一點?

+0

是的,你理解正確。違反唯一要求:addressable_type和:addressable_id應該相等。語法也可以。 – 2014-12-13 18:15:44

+0

語法正常,但Rails不適用於組合的唯一性。 – 2014-12-13 18:20:59

回答

0

是的,這是正確的。唯一性是這對貨幣不是爲了每個價值。您可以再次插入「1-a」和「1-b」,但不能插入「1-a」。

0

你說得對,但唯一性檢查是在數據庫中,而不是在你的代碼中。你可能想要在代碼中進行唯一性檢查(驗證可能會這樣做)。否則,PostgreSQL(或者你所在的任何數據庫)會在你第二次添加一個[1 ,a]組合和Rails將把它轉換成它自己的錯誤。 (然後你得到一個500錯誤返回。)

如果你想驗證這種方式,你也可以拯救並驗證這是錯誤的,但是你必須小心不要過多地解救。