繁体   English   中英

rails 迁移不适用于空的 function

[英]rails migration doesn't work with an empty down function

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

我通过用什么都不做的代码填充空的 function 轻松解决了这个问题,但它仍然很丑陋。

有谁知道为什么会这样? 这是轨道错误吗?

抛出异常是为了防止破坏你的数据库,如果它是不可逆的,那么这可能是正确的做法。 你的#down看起来像这样:

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

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

编辑:我无法确认 Rails 3.2.3 的这种行为。 我在没有#down的情况下创建了几个不同的迁移,并且没有引发 exceptino 。 也许这是您的代码中的某些内容,您没有显示一点。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM