我有一个模型问题,它通过另一个模型question_tags拥有许多标签。我正在尝试编写一个 api 端点,它返回一个问题列表,并为每个问题提供一个相关标签名称和 id 的列表。
我目前正在使用;
render json: @questions.as_json(include: {
tags: { only: %i[id name] }
})
但是这会针对问题中的每个问题运行单独的数据库请求,是否有替代方案可以减少数据库请求的数量?
最佳答案
标准的 N+1 查询修复应该可以在这里工作,这在 Rails 中是预先加载的。
在这种情况下,您可以使用 include
预加载关联的标签
:
render json: @questions.includes(:tags).as_json(
include: {
tags: { only: %i[id name] }
}
)
您可以在专用 rails 指南部分阅读更多相关信息:Eager Loading Associations
关于sql - 如何避免 Rails as_json 创建大量数据库请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60341645/