1

製品が配置されているCategoryモデルがあります。各製品はメーカーに属します(メーカーが設定されていない製品もあり、これらは「不明」とマークしたいと思います)。

ここに私のモデルがあります:

class Product < ActiveRecord::Base
  belongs_to :manufacturer
  belongs_to :category
end

class Manufacturer < ActiveRecord::Base
  has_many :products
end

class Category < ActiveRecord::Base
  has_ancestry
  has_many :products
end

これは簡単なクエリで、それぞれのカテゴリから製品を取得する方法です:

@products = @category.products.paginate(:page => params[:page], :per_page => 15)

それぞれのカテゴリに製品があるすべてのメーカーを印刷したいと思います...この部分に半日苦労していますが、まだクエリが見つかりません...

この部分で私を助けてくれませんか?

ありがとう!

4

2 に答える 2

1

これを試すことができます:

Manufacturer.where(id: @category.products.map(&:manufacturer_id).uniq)

または、データベースに依存して一意の値をフェッチすることもできます。これは、大きなテーブルではより高速になるはずです。

Manufacturer.where(id: Product.select("DISTINCT manufacturer_id").
  where(category: @category).map(&:manufacturer_id))

pluckRails >= 3.2.1 のメソッドを使用することで、これを単純化できます。

Manufacturer.where(id: Product.uniq.where(category_id: @category.id).
  pluck(:manufacturer_id))

has_many :manufacturers, :through => :productsまた、(私の経験では)結合のために、ビッグデータではソリューションが少し遅くなる可能性があることを追加したいと思います。

于 2012-08-06T09:27:12.743 に答える