迁移:如何在允许 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 }
但是,无论如何,您都必须删除唯一索引
编辑:索引部分可能不是必需的,如下面的评论所述。
在我的迁移文件中,我有一个变量,其值应该是唯一的或 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 }
但是,无论如何,您都必须删除唯一索引
编辑:索引部分可能不是必需的,如下面的评论所述。