迁移:如何在保留nil值的同时使其成为索引?

时间:2016-01-21 21:50:59

标签: ruby-on-rails ruby postgresql ruby-on-rails-4 migration

在我的迁移文件中,我有一个变量,其值应该是唯一的或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,如果它有值,需要一个唯一值,并使它成为索引?

1 个答案:

答案 0 :(得分:2)

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

validates :my_var, uniqueness: { allow_nil: true }

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

validates :my_var, uniqueness: { allow_blank: true }

但是,无论如何,你必须放弃你的唯一索引

编辑:索引部分可能没有必要,如下面的评论中所述。