有没有办法在关联上调用关联时使用 ActiveRecord 而不是两个 SQL 查询?

Posted

技术标签:

【中文标题】有没有办法在关联上调用关联时使用 ActiveRecord 而不是两个 SQL 查询?【英文标题】:Is there a way to have one SQL query using ActiveRecord instead of two when calling an association on an association? 【发布时间】:2014-08-25 17:14:53 【问题描述】:

假设我们有用户、帖子和 cmets。用户有很多帖子,帖子有很多cmets,属于一个用户。评论只属于帖子。

假设我有一条评论,并且我想让用户关联到该帖子。

我可以:comment.post.user

这会触发 2 个 SQL 查询(除非帖子已被缓存):

Post Load (0.8ms)  SELECT  "posts".* FROM "posts"  WHERE "posts"."id" = $1 LIMIT 1  [["id", 1]]
User Load (0.4ms)  SELECT  "users".* FROM "users"  WHERE "users"."id" = $1 LIMIT 1  [["id", 1]]

现在,我不是在问是否可以为此进行一个 SQL 查询。我知道它是。有没有办法通过 ActiveRecord 只进行一次查询?

我想如果以上是在交易中完成的,这甚至可能没什么大不了的,但我怀疑它是。

【问题讨论】:

是的,它们被称为连接。 blog.codinghorror.com/a-visual-explanation-of-sql-joins 阅读完这篇文章后,如果您仍然遇到困难,请尝试一些 SQL,发回表结构和您尝试过的内容,我们会提供帮助! 我知道。我说我知道可以进行一个 SQL 查询,这种方式是连接,但是在我上面展示的情况下,ActiveRecord 有没有一种很好的方法来做到这一点。 错过了我编辑主题以包含活动记录并删除 SQL 标记的那部分。这比 SQL 更像是一个 activeRecord 问题。 【参考方案1】:

您可以使用 .includes 方法:http://api.rubyonrails.org/classes/ActiveRecord/QueryMethods.html#method-i-includes

【讨论】:

以上是关于有没有办法在关联上调用关联时使用 ActiveRecord 而不是两个 SQL 查询?的主要内容,如果未能解决你的问题,请参考以下文章

插入具有关联的实体时,有没有办法只使用 FK 而不是检索实体?

Rails 隔离引擎模型关联

Rails Activerecord 通过三个关联查询?

Rails 查询具有关联条件的多个主键

有没有办法将 uicontrol 回调函数的输出关联到它自己的“用户数据”?

更改与 HDC 关联的位图大小后,有没有办法更新 Graphics 对象?