Rails 关于 N+1 查询的问题

jasonliu · 2015年06月05日 · 最后由 jasonliu 回复于 2015年06月05日 · 2380 次阅读

在项目中有时候会遇到 N+1 问题,例如:

clients = Client.limit(10)
clients.each do |client|
  puts client.address.postcode
end

rails 提供了按需加载机制,可以避免这个问题:

clients = Client.includes(:address).limit(10)

clients.each do |client|
  puts client.address.postcode
end

但是如果在预加载的过程中,相关联的数据发生了变化,那读出来的数据会和数据库中的不一致,这个问题要如何解决呢?

共收到 4 条回复

……那就再查一次啊。

@rei 那如果别人修改了数据,但我不知道,我以为我读出来是最新的,但其实并不是,这个时候我需要定时的去刷新么

#2 楼 @jasonliu Real-time Web,要用 WebSocket 一类的技术,Action Cable 出来之前可以用 Faye。

@rei 虽然不知道具体怎么去做,但非常感谢给出的提示

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