2

我正在尝试在一个新表上创建一个索引,该索引需要agency_id(整数)和IP地址(文本)的唯一性。我知道我需要在索引上为IP. 但是我在将长度分配给列时遇到了问题IP

def up
   create_table :whitelisted_ips do |t|
     t.integer :agency_id
     t.text :ip
     t.timestamps
   end

   add_index :whitelisted_ips, [:agency_id, :ip], unique: true, length: 15
end

此代码返回错误

Mysql2::Error: 不正确的前缀键;使用的密钥部分不是字符串,使用的长度比密钥部分长,或者存储引擎不支持唯一前缀密钥: CREATE UNIQUE INDEX `index_whitelisted_ips_on_agency_id_and_ip` ON `whitelisted_ips` (`agency_id`(15), `ip`(15))

因为它试图将长度放在整数字段上。任何帮助,将不胜感激。

4

1 回答 1

4

您应该为参数提供哈希值length

add_index :whitelisted_ips, [:agency_id, :ip], unique: true, length: { ip: 15 }
于 2018-05-11T15:01:25.960 回答