sql - 如何避免 Rails as_json 创建大量数据库请求

标签 sql ruby-on-rails database

我有一个模型问题,它通过另一个模型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/

相关文章:

ruby-on-rails - Rails 延迟作业生产没有发现类/作业代码的变化

sql - 用于 250K+ 字符串的通配符搜索的 Fast(er) 方法

sql-server - 数据库引擎如何处理并发插入?

java - 大学 DBMS 项目的安装

sql - 在 Postgresql 中水平连接两个选择查询

php - 如何在 PHP 中运行另一个 SQL 查询中的 SQL 查询?

ruby-on-rails - 自定义 ActionMailer 预览标题

ruby-on-rails - 如何在 Windows 10 的 linux 子系统上安装 Ngrok 2.0

mysql - Ö(带双点的 O)在 Mysql 记录中?

mysql - 比较 SQL 中的值时没有结果