mysql - Rails:通过迁移添加唯一索引会抛出 Mysql2::Error: BLOB/TEXT

标签 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

用户.rb

class User < ActiveRecord::Base
    has_many :oferts
end

我想验证 user_id 范围内的属性 reference 的唯一性,我的意思是,同一用户不能拥有具有相同引用的产品,但如果不是同一用户,可以重复引用。

如您所见,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 .

关于mysql - Rails:通过迁移添加唯一索引会抛出 Mysql2::Error: BLOB/TEXT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35185768/

相关文章:

php - 如何重新排列SQL表: ID to last ID

javascript - 如何在没有原型(prototype)助手的情况下从 Rails Controller 在页面中呈现部分内容

mysql - 如何使用 Rails 删除 MySQL 中的重复项?

ruby-on-rails - 数组作为 rails 中的参数

ruby-on-rails - Ruby on Rails 4 和 Simple Form 中 "helpers"的可用 i18n 翻译列表?

ruby-on-rails - 在AWS EC2上安装Ruby 2.0和Rails 4.0.0beta

mysql - save()后自动增量属性始终为空

具有独立 WHERE 子句的任意数量的表上的 MySQL JOIN

ruby-on-rails - "bin/rails: No such file or directory"w/Heroku 上的 Ruby 2 和 Rails 4

mysql - 如何更改 MySQL 表的行子集的字符串列的格式?