2015-08-03 72 views
2

我在教程中遇到了以下代码。Rails:删除引用关系

的目标是从表books

class RemoveGenreFromBooks < ActiveRecord::Migration 

    def up 
     remove_index :books, column: [:genre_id] 
     remove_column :books, :genre_id 
    end 

    def down 
     add_reference :books, :genre, index: true 
    end 

end 

删除参考关键词genre_id但我不明白是什么意思remove_index :books, column: [:genre_id]

此外,我没有得到这样的index: truedown方法。

如果我需要补充的关系,我为什么不能只需键入

class Addrelationship < ActiveRecord::Migration 
    def change 
      add_reference :books, :genre 
    end 

回答

1

由于没有添加referecen的方法,有一个还去除 - remove_reference

语法是:remove_reference(table_name, ref_name, options = {})

所以你的情况,以去除Genre参考:

class RemoveGenreFromBooks < ActiveRecord::Migration 
    def change 
    remove_reference :books, :genre, index:true, foreign_key: true 
    end 
end 

选项foreign_key: true也将从books表中删除外键。

0

耙分贝:回滚STEP = 1

一种方法可以做到这一点,如果迁移要回滚是最后一个应用。您可以将1替换为想要返回的多个迁移。

+0

'rake db:rollback'是否默认回滚最后一次迁移? –

+0

是的,使用完整的命令rake db:rollback STEP = 1 –

+0

STEP = 1,STEP = 2等是您想要回滚迁移的步骤。 –