新手问题 在项目上线有了实际数据以后再修改 model 会发生什么

oppih28 · 2014年09月22日 · 最后由 xmonkeycn 回复于 2014年09月22日 · 1658 次阅读

比如我有一个 User,它需要 email 和 password,然后项目上线,有了注册的用户。 再往后,我想要给 User 增加了一个 name 列,这个时候,之前已经注册的用户是没有 name 这一项的,假如有一个 view 要显示出所有用户的 email 和 name,那么已注册用户的 name 位置在数据库里是不是一个 nil?并且 view 中不会显示任何东西?我自己试了一下是这个效果。

我想问,重构的时候应该经常会有类似的情形吧,修改了 model,跑过 migration 后,已有的数据库记录里面还是会缺新加的那一项,怎么处理?

是的。一般的处理是在 migration 的 change 里面加一个命令,比如 User.update_all(foo: 'bar')。不过对于 name 这些靠用户自己输入的值,还是没有就没有吧。

根据业务逻辑来处理了。 有可能是直接生成对应的列,用 email 中@前的。 也可能就是空着了,在其他用到 name 的地方要考虑这种空得情况,validation 也要注意,不要因为原来是空的 name,导致其他修改不能通过 validation。

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