0
我有4種型號:Products
,Vendors
,Categories
,CategoryProducts
(加入模式)。如何通過另一個模型設置has_many關係,但需要唯一性?
- 一個供應商有很多產品。
- 產品屬於供應商。
- 產品有很多種類。
- 供應商有許多類別的產品。
這是我的模型如何建立現在:
Vendor.rb
class Vendor < ActiveRecord::Base
attr_accessible :name, :description, :category_ids, :product_ids, :user_id
has_many :products, :dependent => :destroy
has_many :categories, :through => :products
belongs_to :owner, :class_name => "User",
:foreign_key => "user_id"
end
Product.rb
class Product < ActiveRecord::Base
attr_accessible :name, :description, :price, :vendor_id, :category_ids
belongs_to :vendor
has_many :category_products do
def with_categories
includes(:category)
end
end
has_many :categories, :through => :category_products
end
Category.rb
class Category < ActiveRecord::Base
attr_accessible :name, :product_ids, :category_ids
has_many :category_products do
def with_products
includes(:product)
end
end
has_many :products, :through => :category_products
end
的爲Product & Category
加盟模式:
CategoryProduct.rb
class CategoryProduct < ActiveRecord::Base
attr_accessible :product_id, :category_id, :purchases_count
belongs_to :product
belongs_to :category
validates_uniqueness_of :product_id, :scope => :category_id
end
當我嘗試讓我的命令行供應商的類別,它返回很多重複的結果 - 這主要是因爲它本質上是迴歸該供應商擁有的每個產品的類別。
下面是一個例子,其中v = Vendor.first
:
1.9.3p194 :008 > v.products.count
(0.3ms) SELECT COUNT(*) FROM "products" WHERE "products"."vendor_id" = 10
=> 8
1.9.3p194 :009 > v.categories.count
(0.3ms) SELECT COUNT(*) FROM "categories" INNER JOIN "category_products" ON "categories"."id" = "category_products"."category_id" INNER JOIN "products" ON "category_products"."product_id" = "products"."id" WHERE "products"."vendor_id" = 10
=> 13
1.9.3p194 :010 > Category.count
(7.8ms) SELECT COUNT(*) FROM "categories"
=> 2
有些產品有多個類別,這就是爲什麼有v.products.count
和v.categories.count
之間的差異。
我如何獲得v.categories.count
只顯示類別的唯一數量(在這種情況下,最大值是2
)?
謝謝。
嗯......我想在協會層面做到這一點。我不能那樣做嗎? – marcamillion
完美。忘記那個標誌:) – marcamillion