2011-05-24 45 views
14

我已经迁移了一个名为具有多个列的单元的表。我想知道如何使用cmd将独立的'add_index'迁移到此表中。这是正确的代码:Rails:如何将add_index添加到现有表

class AddIndexToUnits < ActiveRecord::Migration 
    def self.up 
    add_index :units, :lesson_id 
    end 

    def self.down 
    remove :units 
    end 
end 

我有一种感觉,self.down可能是错的,我不确定。

回答

14

self.up方法是正确的。使用此为您self.down:

remove_index :units, :column => :lesson_id 
+0

感谢:d,好像你们有略微不同的答案 – yoshyosh 2011-05-24 09:35:05

+0

不同的是,尤尔起名索引中的他他使用self.up来移除它。我提供的代码根据列名删除索引。 – Kris 2011-05-24 09:39:47

9

几乎

class AddIndexToUnits < ActiveRecord::Migration 
    def self.up 
    add_index :units, :lesson_id, :name=>'lesson_index' 
    end 

    def self.down 
    remove_index :units, 'lesson_index' 
    end 
end 
+0

谢谢! :)我如何从命令行添加此项:rails生成迁移add_index_to_units不起作用 – yoshyosh 2011-05-24 09:34:02

+0

究竟哪些方法无效?新的迁移文件没有创建? – Arsen7 2011-05-24 09:37:39

+0

创建了一个文件,但它看起来很奇怪......就像在self.up定义中有2个add_columns – yoshyosh 2011-05-24 09:46:44

2

要删除索引,您必须使用remove_index用相同的表和列规范作为self.up的add_index了。所以:

def self.down 
    remove_index :units, :lesson_id 
end 

多列索引的例子是:

def self.down 
    remove_index :units, [:lesson_id, :user_id] 
end