Ruby on rails rails迁移不需要';t使用空下功能工作

Ruby on rails rails迁移不需要';t使用空下功能工作,ruby-on-rails,ruby-on-rails-3.2,rails-migrations,Ruby On Rails,Ruby On Rails 3.2,Rails Migrations,我生成了一个带有空down函数的rails 3.2迁移,因为迁移是不可逆的(我不想抛出异常)。我成功运行了迁移,但没有效果。当我回滚并再次运行db:migrate时,效果确实适用 我很容易地解决了这个问题,用一个不做任何事情的代码填充空函数,但它仍然非常难看 有人知道为什么会这样吗?这是rails的错误吗?抛出异常是为了防止破坏数据库,如果它是不可逆转的,那么这可能是正确的做法。 您的#down可能如下所示: def down raise ActiveRecord::Irrevers

我生成了一个带有空down函数的rails 3.2迁移,因为迁移是不可逆的(我不想抛出异常)。我成功运行了迁移,但没有效果。当我回滚并再次运行db:migrate时,效果确实适用

我很容易地解决了这个问题,用一个不做任何事情的代码填充空函数,但它仍然非常难看


有人知道为什么会这样吗?这是rails的错误吗?

抛出异常是为了防止破坏数据库,如果它是不可逆转的,那么这可能是正确的做法。 您的
#down
可能如下所示:

  def down
    raise ActiveRecord::IrreversibleMigration, "Explain why its irreversable!"
  end
这将为其他人省去很多麻烦,因为它清楚地通知了不可逆转的迁移,并解释了其背后的原因:)

编辑:我无法确认Rails 3.2.3的这种行为。我已经创建了几个不同的迁移,但没有
#down
,没有出现异常。可能是你的代码中的某些东西,你一点也没有显示出来


编辑2:简单回顾一下,当您使用向上/向下方法时,您有责任提出
ActiveRecord::不可逆转迁移。在另一种情况下,什么也不会发生(AR中定义的
#down
将只返回nil)。使用
#change
时,行为会有所不同。在某些情况下,此处定义的
#reverse
可能会引发上述异常:这是预期行为。

@SergioTulentsev-true,但即使有些人在这里搜索问题和登录,也应该得到答案;)谢谢,直到几周前我才意识到stackoverflow有一个accept功能:)这可能是正确的解决方案,但它没有回答我描述的行为:)