Ruby on rails 什么决定了什么ActiveRecord可以在更改中回滚

Ruby on rails 什么决定了什么ActiveRecord可以在更改中回滚,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,最近我迁移到一个列以设置默认值 def change change_column :table, :column, :integer, :default => 0 end 然后我想回滚更改: be rake db:rollback RAILS_ENV=test STEP=2 == AddDefaultValueToPriceTiersRegistrationCountAttribute: reverting ========== rake aborted! StandardEr

最近我迁移到一个列以设置默认值

def change 
   change_column :table, :column, :integer, :default => 0
end
然后我想回滚更改:

be rake db:rollback RAILS_ENV=test STEP=2
==  AddDefaultValueToPriceTiersRegistrationCountAttribute: reverting ==========
rake aborted!
StandardError: An error has occurred, all later migrations canceled:

ActiveRecord::IrreversibleMigration
ActiveRecord::IrreversibleMigration: ActiveRecord::IrreversibleMigration
我在活动记录文档中看到了可以处理更改的参考,而活动记录不知道如何进行反转。我想了解一下如何确定它无法处理的更改。最好是我想自动知道。比如:

rake db:migrate
---- migration successful, but i'm sorry but i don't know how to reverse it ----
那么,我又如何确定ActiveRecord是否知道如何回滚迁移呢?其次,是否有一个工具可以通知我它是否知道如何回滚迁移

我如何确定ActiveRecord是否知道如何回滚迁移?其次,是否有工具可以通知我它是否知道如何回滚迁移

冒着看起来油嘴滑舌的风险,我想说这个工具是
rakedb:rollback

因为迁移可以包含任意代码,所以您不应该相信任何迁移都可以在不进行实际测试的情况下进行反转

我如何确定ActiveRecord是否知道如何回滚迁移?其次,是否有工具可以通知我它是否知道如何回滚迁移

冒着看起来油嘴滑舌的风险,我想说这个工具是
rakedb:rollback

因为迁移可以包含任意代码,所以您不应该相信任何迁移都可以在不进行实际测试的情况下进行反转

我如何确定ActiveRecord是否知道如何回滚迁移?其次,是否有工具可以通知我它是否知道如何回滚迁移

冒着看起来油嘴滑舌的风险,我想说这个工具是
rakedb:rollback

因为迁移可以包含任意代码,所以您不应该相信任何迁移都可以在不进行实际测试的情况下进行反转

我如何确定ActiveRecord是否知道如何回滚迁移?其次,是否有工具可以通知我它是否知道如何回滚迁移

冒着看起来油嘴滑舌的风险,我想说这个工具是
rakedb:rollback


因为迁移可以包含任意代码,所以您不应该相信任何迁移都可以在不进行实际测试的情况下进行反转。

Rails要回滚迁移,必须满足以下两个条件之一:

  • 您的迁移包括
    up
    down
    操作,它们明确告诉Rails如何执行
    down
    迁移,或者

  • Rails可以推断如何撤消在
    更改
    迁移过程中引起的更改

  • 在第二种情况下,这或多或少是常识:你的手术是可逆的吗?如果是这样,Rails可能会将其回滚。如果不是,Rails就不是魔术,而是基于单线的

    change_column :table, :column, :integer, :default => 0
    
    在迁移运行之前,Rails无法推断此列的类型或其他属性。如果你不能说出这条线改变了什么,Rails也不能


    通常,如果您正在创建某个对象,“向下”迁移是显而易见的:销毁已创建的对象。如果删除/修改某些内容,Rails无法知道修改前的状态,也无法自动回滚该状态。

    要让Rails回滚迁移,需要满足以下两个条件之一:

  • 您的迁移包括
    up
    down
    操作,它们明确告诉Rails如何执行
    down
    迁移,或者

  • Rails可以推断如何撤消在
    更改
    迁移过程中引起的更改

  • 在第二种情况下,这或多或少是常识:你的手术是可逆的吗?如果是这样,Rails可能会将其回滚。如果不是,Rails就不是魔术,而是基于单线的

    change_column :table, :column, :integer, :default => 0
    
    在迁移运行之前,Rails无法推断此列的类型或其他属性。如果你不能说出这条线改变了什么,Rails也不能


    通常,如果您正在创建某个对象,“向下”迁移是显而易见的:销毁已创建的对象。如果删除/修改某些内容,Rails无法知道修改前的状态,也无法自动回滚该状态。

    要让Rails回滚迁移,需要满足以下两个条件之一:

  • 您的迁移包括
    up
    down
    操作,它们明确告诉Rails如何执行
    down
    迁移,或者

  • Rails可以推断如何撤消在
    更改
    迁移过程中引起的更改

  • 在第二种情况下,这或多或少是常识:你的手术是可逆的吗?如果是这样,Rails可能会将其回滚。如果不是,Rails就不是魔术,而是基于单线的

    change_column :table, :column, :integer, :default => 0
    
    在迁移运行之前,Rails无法推断此列的类型或其他属性。如果你不能说出这条线改变了什么,Rails也不能


    通常,如果您正在创建某个对象,“向下”迁移是显而易见的:销毁已创建的对象。如果删除/修改某些内容,Rails无法知道修改前的状态,也无法自动回滚该状态。

    要让Rails回滚迁移,需要满足以下两个条件之一:

  • 您的迁移包括
    up
    down
    操作,它们明确告诉Rails如何执行
    down
    迁移,或者

  • Rails可以推断如何撤消在
    更改
    迁移过程中引起的更改

  • 在第二种情况下,这或多或少是常识:你的手术是可逆的吗?如果是这样,Rails可能会将其回滚。如果不是,Rails就不是魔术,而是基于单线的

    change_column :table, :column, :integer, :default => 0
    
    在迁移运行之前,Rails无法推断此列的类型或其他属性。如果你不能说出这条线改变了什么,Rails也不能

    通常,如果您正在创建某个对象,“向下”迁移是显而易见的:销毁已创建的对象。如果您删除/修改了某些内容,Rails无法知道修改前的状态,也无法自动回滚。

    sorry@BradWe