2012-08-06 78 views
1

我有Category模型,在哪裏放置產品。每個產品都屬於製造商(也有產品,沒有設置製造商 - 這些我想標記爲「未知」)。Rails - 如何從產品類別獲取所有制造商?

這裏是我的模型:

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) 

我想打印所有的廠商,其中有產品在各自的類別...我掙扎與這部分半天,仍然無法找到查詢...

你能幫助我,請用這部分?

謝謝!

回答

2

添加到您的分類模型:

has_many :manufacturers, :through => :products 

然後就可以調用

@category.manufacturers 

退房的has_many的文檔獲取更多的through選項。

1

你可以試試這個:

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

或者,我們可以在獲取唯一值依賴於數據庫,這應該是快於大表:

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

而且我們可以通過簡化此pluck方法在導軌> = 3.2.1:

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

另外我想補充一點,has_many :manufacturers, :through => :products解決方案由於加入(根據我的經驗)可能會對大數據有點慢。

+0

謝謝!只是試圖整合,但我面臨着這個問題:'未定義的方法「其中」for#'。我錯過了什麼? – user984621 2012-08-06 09:56:08

+0

對不起,請再試一次。 – Flexoid 2012-08-06 09:58:30

+0

謝謝,我試過了,而不是上面的錯誤,我得到了'PG ::錯誤:錯誤:列products.category不存在'。但'產品'表中存在'category_id'列 – user984621 2012-08-06 10:01:38

相關問題