Ruby on rails Rails重复sql查询,即使包含
我很难理解为什么在这种情况下会生成两个重复的sql查询: 我有一篇帖子Ruby on rails Rails重复sql查询,即使包含,ruby-on-rails,ruby-on-rails-3,activerecord,Ruby On Rails,Ruby On Rails 3,Activerecord,我很难理解为什么在这种情况下会生成两个重复的sql查询: 我有一篇帖子有很多评论 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) 现在: (无sql-良好)
有很多评论
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)
现在:
(无sql-良好)然而: 生成相同的sql:
SELECT "posts".* FROM "posts" WHERE "posts"."id" = 4 LIMIT 1
这些对象似乎没有内部绑定。是否有一种方法可以手动执行此操作以避免第二个sql?使用
的反向\u来指定双向关系。发件人:
在关联上指定:inverse_选项可以告诉活动记录反向关系,并优化对象加载
对于简单的情况,它可能看起来是多余的,但关联是单向定义。指定inverse\u of
可以让Rails知道这两个关系是彼此相反的,并且可以解决像您遇到的问题一样的问题
# in post.rb
has_many :comments, :inverse_of => :post
# in comment.rb
belongs_to :post, :inverse_of => :comments
SELECT "posts".* FROM "posts" WHERE "posts"."id" = 4 LIMIT 1
# in post.rb
has_many :comments, :inverse_of => :post
# in comment.rb
belongs_to :post, :inverse_of => :comments