有没有办法在关联上调用关联时使用 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 而不是检索实体?