【问题标题】:rails migration doesn't work with an empty down functionrails 迁移不适用于空下来的功能
【发布时间】:2012-04-09 11:28:22
【问题描述】:

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

我很容易解决了这个问题,方法是用一个什么都不做的代码填充空下来的函数,但它仍然很丑。

有人知道为什么会这样吗?这是一个 Rails 错误吗?

【问题讨论】:

  • @SergioTulentsev 是的,但即使有些人在谷歌上搜索问题并登陆这里,也应该得到答案;)
  • 谢谢,直到几周前我才知道 stackoverflow 有一个接受功能 :)

标签: ruby-on-rails ruby-on-rails-3.2 rails-migrations


【解决方案1】:

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

  def down
    raise ActiveRecord::IrreversibleMigration, "Explain why its irreversable!"
  end

这会让其他人省去很多麻烦,因为它清楚地通知了不可逆转的迁移并解释了其背后的原因:)

编辑:我无法确认 Rails 3.2.3 的这种行为。我在没有#down 的情况下创建了几个不同的迁移,并且没有引发异常。也许是你的代码中的一些东西,你没有显示出来。

编辑 2: 回顾一下,当您使用 up/down 方法时,您有责任提出 ActiveRecord::IrreversibleMigration。在其他情况下,什么都不会发生(AR 中定义的#down 只会返回 nil)。当您使用#change 时,行为会有所不同。在某些情况下,此处定义的#inverse 可以引发上述异常:https://github.com/rails/rails/blob/565bfb9cd49285ebaa170141b4996c22ba81de43/activerecord/lib/active_record/migration/command_recorder.rb#L39,这是预期的行为。

【讨论】:

  • 这可能是正确的解决方案,但它不能回答我描述的行为:)
猜你喜欢
  • 2011-07-07
  • 1970-01-01
  • 2015-07-03
  • 2013-06-22
  • 2013-07-09
  • 2017-03-06
  • 2012-02-19
  • 1970-01-01
  • 2021-06-11
相关资源
最近更新 更多