0

我有 3 个模型:

class ProductLine < ActiveRecord::Base
  has_many :specifications
  has_many :specification_categories, :through => :specifications,
end

class Specification < ActiveRecord::Base
  belongs_to :product_line
  belongs_to :specification_category
end

class SpecificationCategory < ActiveRecord::Base
  has_many :specifications
  has_many :product_lines, :through => :specifications
end

基本上,我们在产品线页面上将规格显示为数据的子集,我们想做类似的事情(仅作为示例,是的,我知道 N+1):

控制器:

@product_line = ProductLine.find(params[:id])
@specification_categories = @product_line.specification_categories)

看法:

@specification_categories.each do |specification_category|
 ...
 specification_category.specifications.each do |specification|
  ...
 end
end

这里的问题是让 Rails 过滤 ProductLine 的规范。我已经尝试构建查询来执行此操作,但是在调用最终关联时它总是会生成一个单独的 NEW 查询。即使我们现在没有使用上面的代码(这里不是一个好主意,因为我们可能会遇到 N+1 问题),我想知道是否可以使用关联过滤进行 3 路连接. 有没有人遇到过这种情况?您能否提供一个示例,说明我将如何在此处完成此操作?

4

1 回答 1

0
  1. 通过将您的行更改为:@specification_categories = @product_line.specification_categories).include(:specifications) 来防止 N+1

或者

  1. 使用 .joins(:association) 构建您自己的查询,并自己进行分组。
于 2012-10-09T14:48:57.903 回答