在创建复合唯一索引时提供文本列长度

Provide text column length on composite unique index creation

我正在尝试在新的 table 上创建索引,该索引需要 agency_id(整数)和 IP 地址(文本)的唯一性。我知道我需要为 IP 提供索引长度。但是我在将长度分配给 just 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

这段代码returns错误

Mysql2::Error: Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys: CREATE UNIQUE INDEX `index_whitelisted_ips_on_agency_id_and_ip` ON `whitelisted_ips` (`agency_id`(15), `ip`(15))

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

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

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