[英]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.