2014-12-13 54 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错误返回。)

如果你想验证这种方式,你也可以拯救并验证这是错误的,但是你必须小心不要过多地解救。