我正在创建Rails模型,我将与之建立多态关联。在迁移中,我有以下索引,并希望这些列一起唯一。我已经读过您可以将列合在一起列,但我想确保我理解这意味着什么。
add_index :addresses, [:addressable_type, :addressable_id], :unique => true
假设addressable_id
在两种情况下等于1,但一种类型为a
,另一种类型为b
。这不违反独特要求,对吗?我想确保这两个列都能确定唯一性。我能正确理解吗?
答案 0 :(得分:0)
是的,没错。唯一性是对于每个值不对。您可以插入“1-a”和“1-b”,但不能再插入“1-a”。
答案 1 :(得分:0)
您已经做对了,但唯一性检查在数据库中,而不在您的代码中。
您也希望在代码中进行唯一性检查(验证可能会执行此操作。)否则,PostgreSQL(或您所在的任何数据库)将在第二次添加[[]时返回错误1,a] combo和Rails会将其转换为自己的错误。 (然后返回500错误。)
如果您想验证这种方式,您也可以挽救并验证这是错误,但您必须小心不要挽救太多。