我正在使用Ruby on Rails 3.1,我正在尝试改进SQL查询,以便以高效的方式检索“关联”记录和“关联通过”记录(ActiveRecord::Associations
),以避免“ N + 1查询问题“。也就是说,我有:
class Article < ActiveRecord::Base
has_many :category_relationships
has_many :categories,
:through => :category_relationships
end
class Category < ActiveRecord::Base
has_many :article_relationships
has_many :articles,
:through => :article_relationships
end
在几个SQL查询中(即,以“高效的方式”,可能通过使用Ruby on Rails includes()
方法)我想检索categories
和{ {1}} ,或同时category_relationships
和articles
。
我该怎么做?
P.S。:我正在改进如下的查询:
article_relationships
答案 0 :(得分:0)
你可以做到
Article.includes(:category_relationships => :categories).find(1)
这将减少到3个查询(每个表1个)。为了提高性能,还要确保外键具有索引。
但总的来说,我很好奇为什么“category_relationships”实体存在,为什么这不是一个has_and_belongs_to的情况呢?
<强>更新强>
根据您更改的问题,您仍然可以
Category.includes(:article_relationships => :articles).first
如果你观看控制台(或尾部日志/开发),你会看到当你调用关联时,它会点击缓存的值并且你是金色的。
但我仍然很好奇为什么你没有使用Has和Belongs To Many协会。