一次又一次地从另一个模型获取记录的最佳方式 - Rails



我有一个模型Booking,其中包含与Space模型关联的space_id属性belongs_to :space

现在我有多个空格,想根据每个ID计算每个预订。

我想获得从数据库一次又一次地发送记录的最佳方法,而无需一次又一次地进行火灾查询。 目前,我这样做:

spaces = Space.all
result = []
spaces.each do |s|
result << s.as_json.merge(:bookings_counts=>s.bookings.count)
end

但这是从数据库一次又一次地触发查询。 有没有最好的方法可以做到这一点?

这称为"N+1 查询"问题。在 Rails 中,您可以使用预先加载来解决这个问题。您可以使用includes在单个查询中加载记录,方法是将代码的第一行更改为

spaces = Space.eager_load(:bookings)

这里有一个很好的解释和比较方法(includeseager_loadpreload(在Rails链接中进行预先加载。

最新更新