Ruby on Rails добавление еще одного индекса через миграцию приводит к превышению в 64 символа

Я хочу добавить еще один столбец индекса в мою таблицу индексов, но получить индекс для таблицы слишком долго; ограничение составляет 64 символа. Rails 3 и MySQL DB, кстати.

Текущая схема выглядит следующим образом:

  create_table "admin_users_projects", :force => true do |t|
    t.integer "admin_user_id"
    t.integer "project_id"
  end

  add_index "admin_users_projects", ["admin_user_id", "project_id"], :name =>     "index_admin_users_projects_on_admin_user_id_and_project_id"

Я пытаюсь запустить следующую миграцию, чтобы добавить индекс:

class AddIndexToAdminUsersProjects < ActiveRecord::Migration
  def change
    add_index :index_admin_users_projects_on_admin_user_id_and_project_id,     :admin_users_project_id
  end
end

Но при попытке получить рейк вы получите следующее:

Larrys-MacBook-Pro:scrumtool larrydavid$ rake db:migrate
==  AddIndexToAdminUsersProjects: migrating ===================================
-- add_index(:index_admin_users_projects_on_admin_user_id_and_project_id,     :admin_users_project_id)
rake aborted!
An error has occurred, all later migrations canceled:

Index name     'index_index_admin_users_projects_on_admin_user_id_and_project_id_on_admin_users_project_id'     on table 'index_admin_users_projects_on_admin_user_id_and_project_id' is too long; the limit     is 64 characters
[...]

1 ответ

Решение

Попробуй это

class AddIndexToAdminUsersProjects < ActiveRecord::Migration
  def change
    add_index :admin_users_project, [:admin_users_id, :project_id], :name => 'index_admin_projects_on_admin_and_project'
  end
end
Другие вопросы по тегам