如何在Ruby on Rails迁移中创建唯一的列并将其编入索引?

我想在Ruby on Rails迁移脚本中创建一个unique的列。 什么是最好的方式来做到这一点? 还有一种方法来索引表中的列?

我想强制数据库中的unique列,而不仅仅是使用:validate_uniqueness_of


简短的回答:

add_index :table_name, :column_name, unique: true

要将多个列索引到一起,需要传递一个列名称数组而不是单个列名称,

add_index :table_name, [:column_name_a, :column_name_b], unique: true

对于更细粒度的控制,有一个执行直接SQL的“ execute ”方法。

而已!

如果您将其作为常规旧模型验证的替代品,只需检查它是如何工作的。 我不确定向用户报告的错误会不错。 你总是可以做到这一点。


rails生成迁移add_index_to_table_name column_name:uniq

要么

rails生成迁移add_column_name_to_table_name column_name:string:uniq:index

生成

class AddIndexToModerators < ActiveRecord::Migration
  def change
    add_column :moderators, :username, :string
    add_index :moderators, :username, unique: true
  end
end

如果要向现有列添加索引,请删除或注释add_column行,或放入一个检查

add_column :moderators, :username, :string unless column_exists? :moderators, :username

由于尚未提及此问题,但它回答了我在找到此页面时遇到的问题,您还可以指定在通过t.referencest.belongs_to添加索引时索引应该是唯一的:

create_table :accounts do |t|
  t.references :user, index: { unique: true } # or t.belongs_to

  # other columns...
end

(至少Rails 4.2.7

链接地址: http://www.djcxy.com/p/47175.html

上一篇: How do I make a column unique and index it in a Ruby on Rails migration?

下一篇: Rails migrations: Undo default setting for a column