【发布时间】:2017-10-22 15:39:31
【问题描述】:
给定以下模型:
class Author < ApplicationRecord
has_many :books
end
如果我跑步
author.books.any?
我使用EXISTS 查询访问了数据库。如果我跑
1000.times { author.books.any? }
结果是 1000 次查询,因为结果没有缓存在内存中 author 对象上。
我处于与上述类似的现实生活中,我在同一个 author 对象上调用(一种使用方法)author.books.any? 数千次。
我想通过在作者对象上缓存结果来避免过多的查询。最有表现力的方法是什么?我知道例如author.books.to_a.any? 会起作用,但它不是语义的。 (它还缓存所有关联数据,而不仅仅是关联数据的长度,但这对我来说没问题,因为在我的情况下,关联表非常小。)
ActiveRecord::Relation 上的 any? 或 exists? 是否有内置替代方案可以满足我的要求?
【问题讨论】:
-
您可以创建查询,它将获取books.count > 0的作者
标签: ruby-on-rails ruby