如果我有一个模特 has_many
关系,如何检索查询中所有记录指向的所有记录?
比如说,建筑物和房间有很多关系。我想做的是:
Building.where(...query...).rooms.count
这只是一个例子。我可能想要计算它们,或者我可能想要一个与查询匹配的建筑物所属房间的activerecord。
一种方法是这样,但我想知道是否有更好的方法:
building_ids = Building.where(...query...).pluck(:id)
Room.where(building_id: building_ids).count
2条答案
按热度按时间cetgtptt1#
使用
select
而不是pluck
将导致一个sql语句,而不是两个单独的sql语句。你也可以使用
join
```Room.joins(:building).where(building: { name: 'somename' })
wbgh16ku2#
我会使用计数器缓存的总和。
在迁移中添加计数器缓存列:
更新房间中的关系:
然后你可以这样做:
这将避免n+1查询
更多详情请点击此处https://blog.appsignal.com/2018/06/19/activerecords-counter-cache.html