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

ここでの問題は、ProductLine によって仕様をフィルタリングするレールを取得することです。これを行うためにクエリを作成しようとしましたが、最終的な関連付けが呼び出されると、常に別の NEW クエリが生成されます。現在、上記のコードを使用していませんが (N+1 問題が発生する可能性があるため、ここではお勧めできません)、アソシエーション フィルタリングを使用して 3 方向の結合を行うことさえ可能かどうかを知りたいです。 . このシナリオに出くわした人はいますか? ここでこれを達成する方法の例を教えてください。

4

1 に答える 1

0
  1. 次のように行を変更して、N + 1を防止します:@specification_categories = @ product_line.specification_categories).include(:spe​​cifications)

また

  1. .joins(:association)を使用して独自のクエリを作成し、自分でグループ化を行います。
于 2012-10-09T14:48:57.903 に答える