rails migration不适用于空向下功能

Ind*_*gon 1 ruby-on-rails rails-migrations ruby-on-rails-3.2

我使用空向下功能生成了rails 3.2迁移,因为迁移是不可逆转的(我不想抛出异常).我成功运行了迁移,但它没有任何效果.当我回滚并再次运行db:migrate时,效果确实适用.

我通过用一个什么都没做的代码填充空的向下函数来轻松解决这个问题,但它仍然很难看.

有谁知道为什么会这样?这是一个rails bug吗?

Ern*_*est 7

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

  def down
    raise ActiveRecord::IrreversibleMigration, "Explain why its irreversable!"
  end
Run Code Online (Sandbox Code Playgroud)

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

编辑:我无法确认Rails 3.2.3的这种行为.我已经创建了几个不同的迁移#down,并且没有引发过exceptino.也许它是你代码中的东西,你没有显示一点.

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