加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 02:20:47 所属栏目:百科 来源:网络整理
导读:我无法理解为什么在这种情况下生成两个重复的SQL查询: 我有一个帖子has_many:评论 post = Post.where(id: 4).includes(:comments).first 生成这些sql语句: SELECT "posts".* FROM "posts" WHERE "posts"."id" = 4 LIMIT 1SELECT "comments".* FROM "comme
我无法理解为什么在这种情况下生成两个重复的SQL查询:

我有一个帖子has_many:评论

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

看起来这些对象不是内部绑定的.有没有办法我可以手动避免第二个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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读