Rails:使用迁移添加唯一索引会抛出Mysql2 ::错误:BLOB / TEXT

时间:2016-02-03 19:18:12

标签: mysql ruby-on-rails ruby-on-rails-4 activerecord rails-migrations

我有这个型号:

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的唯一性,我的意思是,同一个用户不能拥有具有相同引用的产品,但如果是,则可以重复引用不是同一个用户。

您可以看到validates_uniqueness_of模型中有Ofert语句,然后我添加了此迁移:

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`)

这里有什么问题?

1 个答案:

答案 0 :(得分:1)

因为:reference是text或blob列,您必须指定索引的长度:

add_index :oferts, [:reference, :user_id], unique: true, length: 10

最大长度限制取决于您使用的数据库引擎,因此请仔细检查MySQL index documentation