Rails将唯一的列迁移到一起

时间:2014-12-13 17:56:42

标签: ruby-on-rails

我正在创建Rails模型,我将与之建立多态关联。在迁移中,我有以下索引,并希望这些列一起唯一。我已经读过您可以将列合在一起列,但我想确保我理解这意味着什么。

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

假设addressable_id在两种情况下等于1,但一种类型为a,另一种类型为b。这不违反独特要求,对吗?我想确保这两个列都能确定唯一性。我能正确理解吗?

2 个答案:

答案 0 :(得分:0)

是的,没错。唯一性是对于每个值不对。您可以插入“1-a”和“1-b”,但不能再插入“1-a”。

答案 1 :(得分:0)

您已经做对了,但唯一性检查在数据库中,而不在您的代码中。

您也希望在代码中进行唯一性检查(验证可能会执行此操作。)否则,PostgreSQL(或您所在的任何数据库)将在第二次添加[[]时返回错误1,a] combo和Rails会将其转换为自己的错误。 (然后返回500错误。)

如果您想验证这种方式,您也可以挽救并验证这是错误,但您必须小心不要挽救太多。