0

У меня уже есть этот файл миграции, который был создан и была выполнена миграция.Как изменить индекс таблицы, которая уже была создана с использованием миграции рельсов?

class CreateStudentContexts < ActiveRecord::Migration 
    def change 
    create_table :student_contexts do |t| 
     t.string :student_id, index: true, null: false, limit: 40 
     t.text :data 
     t.timestamps null: false 

     t.index [:student_id, :updated_at], unique: true, name: 'student_context_index' 
    end 
    end 
end 

Теперь я хочу, чтобы создать новый миграционный файл, который будет обновлять индекс, а поля индекса должны быть student_id и created_at.

ответ

1

Вы можете создать другую миграцию и изменить таблицу. Что-то вроде

class MyMigration < ActiveRecord::Migration 
    def change 
    remove_index :student_contexts, :updated_at 
    add_index :student_contexts, :created_at 
    end 
end 

сделало.

+0

он выдает сообщение об ошибке «index_name_for_remove»: произошла ошибка, эта и все последующие миграции отменены: (StandardError) «Имя индекса index_student_contexts_on_updated_at» в таблице «student_contexts» не существует – Lollypop

0

Этот вопрос своего рода старый, но в случае, если кто попадается ему:

ответ Джастин Вуд должен работать, но с одним изменением: заменить имя столбца в методе remove_index с именем индекса:

remove_index :student_contexts, name: 'student_context_index' 

Когда индекс был создан, ему было присвоено имя специфические (нестандартные) с name аргумента, так что вы также должны использовать name аргумент в remove_index заявлении. В противном случае Rails ожидает, что индекс будет иметь стандартное имя (в данном случае «index_student_contexts_on_updated_at»).

Смежные вопросы