Ruby on Rails - 反向add_column,add_index迁移

时间:2014-11-23 11:09:50

标签: ruby-on-rails ruby

我在调查模型中设置的关联如下

attr_accessible :name, :questions_attributes
has_many :questions

和问题模型

attr_accessible :content, :survey_id, :answers_attributes
belongs_to :survey

我有一个将question_id添加到调查表的迁移 但我开始意识到这种迁移不是必需的 我已经在模型中定义了它们的关联。 我的理解是否正确?

如果我的理解是正确的,我想反转这种迁移。

我添加了以remove开头的最后两行并运行rake db:migrate 但它没有做任何事情。

def change
    add_column :surveys, :question_id, :integer
    add_index :surveys, :question_id
    remove_column :surveys, :question_id, :integer
    remove_index :surveys, :question_id
end

3 个答案:

答案 0 :(得分:2)

根据我的理解,您希望回滚迁移。如果是这样,那么您可以使用以下语法

rake db:rollback STEP=n

       or


rake db:migrate:down VERSION=<version_number_of_migration>

回滚特定的迁移

答案 1 :(得分:2)

def up
  add_column :surveys, :question_id, :integer
  add_index :surveys, :question_id
end

def down
  remove_index :surveys, :question_id
  remove_column :surveys, :question_id
end

up方法在rake db:migrate上执行,down方法在rake db:rollback上执行 您不能仅依赖change方法,因为需要完成回滚的顺序(首先删除索引,然后删除列)

编辑: 实际上,你只需在Rails 3.2 +

中使用change即可
def change
  add_column :surveys, :question_id, :integer
  add_index :surveys, :question_id
end

答案 2 :(得分:0)

是的,总是需要编写一个迁移来在调查表中添加question_id

仅声明关联是不够的

您的迁移应该是这样的

改变了   add_reference:survey,:question,index:true 端

如果您的系统中只有更改,则可以随时回滚迁移。在这些迁移在不同环境中运行后,请勿尝试回滚

回滚rake db:migrate:rollback VERSION =“迁移文件的时间戳”