gpt4 book ai didi

mysql - 渴望加载相关记录,同时在 Rails 中加入它

转载 作者:太空宇宙 更新时间:2023-11-03 11:16:50 25 4
gpt4 key购买 nike

假设我有几本书,每本书都属于一位作者。我想打印一份图书 list 以及一些相关的作者信息。作为初始 channel ,我会简单地使用

@books = Book.all

在我的 Controller 中

book.author.name

在我看来,这会导致 @books.count 单独的查询(“n+1”问题)。推荐的解决方案是

@books = Books.includes(:author)

这将其减少为恒定数量的查询。

现在,如果我需要根据与作者有关​​的某些标准来过滤图书列表,我会在 Controller 中执行

@books = Books.joins(:author).where('name like "%Richler%"')

但这又重新引入了“n+1”问题。如果我尝试将 .includes(:author) 放入查询中,它会尝试将其拉入两次,并且 name 变得不明确。在常规 MySQL 中,我只会使用类似的东西:

SELECT * FROM books LEFT OUTER JOIN authors ON books.author_id = authors.id
WHERE authors.name LIKE "%Richler%";

SELECT * FROM books, authors WHERE
authors.name LIKE "%Richler%" AND books.author_id = authors.id;

但是除了只编写一个 SQL 查询字符串之外,Railsish 的方法是什么来完成它?

最佳答案

这应该可以完成工作:

Book.joins(:author).where('authors.name like "%Richler%"').includes(:author)

这应该只触发两个 SQL 查询。

关于mysql - 渴望加载相关记录,同时在 Rails 中加入它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4507461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com