【问题标题】:Change column in Rails to be unique将 Rails 中的列更改为唯一
【发布时间】:2015-11-20 16:42:49
【问题描述】:

我知道以前有人问过很多类似的问题,但我没有准确找到这个问题(也许这不可能)。

所以我的 Rails 表中有一个 Column_A(使用 MySQL)。最近我们需要在此列上强制执行唯一性。

是否可以对此列进行更改以使其独一无二?

我想出的唯一其他解决方案是创建一个临时的唯一列并随机播放所有内容。这会很痛苦。

谢谢!

【问题讨论】:

  • 不确定,为什么不在模型中简单地使用 validates_uniqueness_of :Column_A?
  • change_column :table_name, :column_name, :string, unique: true
  • validates_uniqueness 是通过 rails 在保存之前检查值是否已经存在来完成的,但它可能会因竞争条件而失败。另一方面,通过数据库强制执行唯一性将保证它保持不变
  • validates_uniqueness 检查表列中该值的唯一性,如果有任何重复,则会引发错误并且不会保存。另一方面独特?只需检查它在列表或数组中是否是唯一值。 (ActiveRecord 中的'.uniq' 从列中获取唯一值)
  • 解决方案应该分两步,按照@PardeepDhingra 的建议通过迁移更改您的表,并按照我的建议在模型中添加验证。 (.uniq 是一个获取唯一结果的查询,与您的问题无关)。

标签: mysql ruby-on-rails


【解决方案1】:

简单的两步流程:

1:创建迁移

change_column :table_name, :column_name, :string, unique: true

2:在模型中添加验证

validates_uniqueness_of :column_name

【讨论】:

  • 这里没有数据库级别的唯一性(即创建的索引)
【解决方案2】:

您可以这样添加索引:

add_index :table_name, :column_name, unique: true
  • 导轨 5.2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 2015-02-15
    • 2018-06-04
    相关资源
    最近更新 更多