Rails 碰到 Rails 5 的一个坑:belongs_to 默认语义的变化

jiang_plus · 2016年08月30日 · 最后由 zlx_star 回复于 2017年04月18日 · 3420 次阅读

把一个老项目用 rails5 重构了,并且把数据迁移进来,期间数据无法保存。

反复查了一下,belongs_to 的默认行为发送了变更,belongs_to association 默认是 required 的,除非显式设置为 optional

class Post < ApplicationRecord
  belongs_to :user
end

等同于:

class Post < ApplicationRecord
  belongs_to :user, required: true
end

如果要恢复为可选的话,可以这么写:

class Post < ApplicationRecord
  belongs_to :user, optional: true
end

更多可以查看:

http://blog.bigbinary.com/2016/02/15/rails-5-makes-belong-to-association-required-by-default.html

对我影响不大,一个 Post 没有 User 感觉有点奇怪,外星人的帖子?匿名帖也要 User 吧,只是不显示而已

里面不是有说可以通过配置恢复之前的行为么。

@greatghoul 是的,可以修改这个默认配置

多写测试还是好,项目迁移第一时间内就发现了这个问题。

这个不算坑吧,升级指南都写得很清楚这个变化

#5 楼 @hungyuhei 官方可能没有强调这么个指南,不过工作是自己的,还是应该注意。

#4 楼 @jicheng1014 我也是跑测试发现的。

遇到过这个问题,应该算是 rails5 的新 feature。

不算坑。很明显用之前需要先看一下官方的 changelog 的。http://guides.rubyonrails.org/5_0_release_notes.html

请认真看官方指南

碰到某些特殊情况就是坑了。

比如说 IP 地址判断地区,由于目前不存在覆盖率 100% 的 IP 库,所以必然会出现某个 IP 关联的地址为空,这时候如果使用了 belongs_to,坑你没商量。

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