gpt4 book ai didi

ruby-on-rails - Rails 重复 sql 查询,即使包含

转载 作者:行者123 更新时间:2023-12-04 06:16:50 24 4
gpt4 key购买 nike

我很难理解为什么在这种情况下会生成两个重复的 sql 查询:

我有一个帖子 has_many :comments

post = Post.where(id: 4).includes(:comments).first

生成这些 sql 语句:
SELECT "posts".* FROM "posts" WHERE "posts"."id" = 4 LIMIT 1
SELECT "comments".* FROM "comments" WHERE "comments"."post_id" IN (4)

现在:
comment = post.comments.first

(没有 sql - 好)
然而:
post = comment.post

生成相同的sql:
SELECT "posts".* FROM "posts" WHERE "posts"."id" = 4 LIMIT 1

似乎对象没有在内部绑定(bind)。有没有办法可以手动避免第二个 sql ?

最佳答案

使用inverse_of指定双向关系。来自 the docs :

Specifying the :inverse_of option on associations lets you tell Active Record about inverse relationships and it will optimise object loading.



对于简单的情况,它可能看起来是多余的,但关联是单向定义。指定 inverse_of让 Rails 知道这两种关系是相反的,并且可以解决您遇到的问题。
# in post.rb
has_many :comments, :inverse_of => :post

# in comment.rb
belongs_to :post, :inverse_of => :comments

关于ruby-on-rails - Rails 重复 sql 查询,即使包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15605154/

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