迁移:如何在允许 nil 值的情况下使其成为索引?

Migration: How to make it an index while still allowing for nil values?

在我的迁移文件中,我有一个变量,其值应该是唯一的或 nil。我怎样才能做到这一点?我当前的设置会产生各种验证错误,我认为是因为 nil 值不是唯一的,并且在当前设置中它希望看到唯一的值。

我目前有:

迁移文件:

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string   :my_var
      ...
    end
  end
end

class AddIndex < ActiveRecord::Migration
  def change
    add_index :users,  :my_var,    unique: true
  end
end

模型文件:

validates :my_var, uniqueness: true

有没有办法让它成为nil,如果它有值就要求一个唯一值,并使它成为一个索引?

至于你的模型验证,你可以这样做:

validates :my_var, uniqueness: { allow_nil: true }

或者,如果您想包含空字符串(即 ""

validates :my_var, uniqueness: { allow_blank: true }

但是,无论如何,您都必须删除唯一索引

编辑:索引部分可能不是必需的,如下面的评论所述。