Ruby on rails Rails将唯一的列迁移到一起

Ruby on rails Rails将唯一的列迁移到一起,ruby-on-rails,Ruby On Rails,我正在创建Rails模型,并与之进行多态关联。在迁移中,我有以下索引,并希望这些列在一起是唯一的。我已经读到,你们可以使专栏在一起变得独一无二,但我想确保我理解这意味着什么 add_index :addresses, [:addressable_type, :addressable_id], :unique => true 假设在两种情况下,可寻址_id等于1,但一种类型是a,另一种类型是b。这不会违反独特的要求,对吗?我想确保这会考虑两列以确定唯一性。我理解正确吗?是的,没错。唯一性是

我正在创建Rails模型,并与之进行多态关联。在迁移中,我有以下索引,并希望这些列在一起是唯一的。我已经读到,你们可以使专栏在一起变得独一无二,但我想确保我理解这意味着什么

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

假设在两种情况下,可寻址_id等于1,但一种类型是a,另一种类型是b。这不会违反独特的要求,对吗?我想确保这会考虑两列以确定唯一性。我理解正确吗?

是的,没错。唯一性是针对该对,而不是针对每个值。您可以插入1-a和1-b,但不能再次插入1-a。

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

您需要在代码中进行唯一性检查,验证也可能会这样做。否则,PostgreSQL或您所在的任何数据库在您第二次添加[1,a]组合时将返回一个错误,Rails将把它转换为自己的错误。然后返回一个500错误


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

是的,您正确理解这一点。若要违反唯一性要求,则:addressable_type和:addressable_id应相等。语法也可以,语法也可以,但Rails不能处理组合的唯一性。