如何更改已使用rails migration创建的表的索引?

时间:2015-07-15 00:47:39

标签: ruby-on-rails ruby ruby-on-rails-4 rails-activerecord rails-migrations

我已经创建了此迁移文件,并且已运行迁移。

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。

2 个答案:

答案 0 :(得分:2)

您可以创建另一个迁移并更改表格。像

这样的东西
class MyMigration < ActiveRecord::Migration
  def change
    remove_index :student_contexts, :updated_at
    add_index :student_contexts, :created_at
  end
end

会做的。

答案 1 :(得分:2)

这个问题有点陈旧,但万一有人碰到它:

Justin Wood的答案应该有效,但只需更改一次:将remove_index方法中的列名替换为索引名称:

remove_index :student_contexts, name: 'student_context_index'

创建索引时,会为其指定一个带有name参数的特定(非标准)名称,因此您还需要在name语句中使用remove_index参数。否则,Rails希望索引具有标准名称(在本例中为“index_student_contexts_on_updated_at”)。