Rails: Adding unique index with migration throws Mysql2::Error: BLOB/TEXT
Rails: Adding unique index with migration throws Mysql2::Error: BLOB/TEXT
我有这个型号:
ofert.rb
class Ofert < ActiveRecord::Base
belongs_to :user
validates_uniqueness_of :reference, scope: :user_id
end
user.rb
class User < ActiveRecord::Base
has_many :oferts
end
我想验证 reference
范围内的属性 user_id
的唯一性,我的意思是,同一用户不能拥有具有相同引用的产品,但引用可以重复如果不是同一个用户。
如您所见,Ofert
模型中有一个 validates_uniqueness_of
语句,然后我添加了此迁移:
add_index(:oferts, [:reference, :user_id], unique: true)
然而,当我 运行 迁移时,出现以下错误:
Mysql2::Error: BLOB/TEXT column 'reference' used in key specification without a key length: CREATE UNIQUE INDEX `index_oferts_on_reference_and_user_id` ON `oferts` (`reference`, `user_id`)
这是怎么回事?
由于 :reference 是文本或 blob 列,您必须指定索引的长度:
add_index :oferts, [:reference, :user_id], unique: true, length: 10
最大长度限制取决于您使用的数据库引擎,因此请仔细检查 MySQL index documentation。
我有这个型号:
ofert.rb
class Ofert < ActiveRecord::Base
belongs_to :user
validates_uniqueness_of :reference, scope: :user_id
end
user.rb
class User < ActiveRecord::Base
has_many :oferts
end
我想验证 reference
范围内的属性 user_id
的唯一性,我的意思是,同一用户不能拥有具有相同引用的产品,但引用可以重复如果不是同一个用户。
如您所见,Ofert
模型中有一个 validates_uniqueness_of
语句,然后我添加了此迁移:
add_index(:oferts, [:reference, :user_id], unique: true)
然而,当我 运行 迁移时,出现以下错误:
Mysql2::Error: BLOB/TEXT column 'reference' used in key specification without a key length: CREATE UNIQUE INDEX `index_oferts_on_reference_and_user_id` ON `oferts` (`reference`, `user_id`)
这是怎么回事?
由于 :reference 是文本或 blob 列,您必须指定索引的长度:
add_index :oferts, [:reference, :user_id], unique: true, length: 10
最大长度限制取决于您使用的数据库引擎,因此请仔细检查 MySQL index documentation。