【问题标题】:Rails migration unique columns togetherRails 将唯一列迁移在一起
【发布时间】:2014-12-13 17:56:42
【问题描述】:

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

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

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

【问题讨论】:

  • 是的,您理解正确。要违反唯一要求, :addressable_type 和 :addressable_id 应该相等。语法也可以。
  • 语法没问题,但 Rails 不适用于组合的唯一性。

标签: ruby-on-rails


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    你说得对,但唯一性检查是在数据库中,而不是在你的代码中。

    您还需要在代码中进行唯一性检查(可能会进行验证。)否则,PostgreSQL(或您所在的任何数据库)将在您第二次添加 [1, a] 组合和 Rails 会将其转换为自身的错误。 (然后返回 500 错误。)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-10
      • 2014-09-08
      • 2020-08-14
      • 1970-01-01
      • 1970-01-01
      • 2013-05-03
      • 2016-03-29
      相关资源
      最近更新 更多