新手问题 rails db:migrate 用于调用所有未运行的迁移中的 chagne 或 up 方法,那么其中的 down 不会运行吗?

huangpuxiang · 2017年08月30日 · 最后由 huangpuxiang 回复于 2017年08月30日 · 1239 次阅读

1、在 rails guides 的 Active Record 章节中写道: rails db:migrate 任务,用于调用所有未运行的迁移中的 chagne 或 up 方法, 那么在新的迁移中写的 down 方法就不会运行吗? 2、而在介绍 up 和 down 时写道: 如果调用 up 方法之后紧接着调用 down 方法,数据库模式不会发生任何改变。 这句话不是很上面矛盾了吗?

  1. rails db:rollback 会调用 down,或者 change 中的反义操作(如果有对应的反义操作)

  2. 若 up 中 add_column,down 中 remove_column,那么调完 up 再调 down(migrate 然后 rollback),结果就相当于没加过 column

感觉你没跟着做一遍

第二句的意思是相当于告诉你 down 的作用是,其执行后可以抵消掉与它配对的 up 产生的所有效果。并不是说 down 在 up 执行之后就马上执行

你可以这么理解,change 这个方法集成了 up 和 down 这两个方法,而执行 rails db:migrate 时,执行 up 或者 change 中的 up 部分。

待需要执行 rails db:rollback 时则才会触发 down 或 change 中的 down 部分。

确实没有跟着做,谢谢指正!

需要 登录 后方可回复, 如果你还没有账号请 注册新账号