2012-03-02 4 views
0

我是這樣一個聯合體,Rails - 通過一起使用HABTM和has_many的不良影響?

Shop habtm Products 
Product habtm Shops 

Shop belongs_to Merchant 

爲了方便,我也宣佈

Merchant has_many :products, :through=>:shops 

在我的產品控制器,

@products = current_user.merchant.products

當我<%=debug @products %>,收集包括多個同一個對象的副本。

這是正常的還是我通過宣佈HABTM和has_many通過在一起?

如果這是正常的,有沒有方法可以調用沒有重複條目的產品?

謝謝。

更新

我意識到這一點應該沒問題,因爲habtmShopsProducts之間。 Merchant has_many Products。是否有可能在產品模型中沒有設置外鍵的情況下打電話給product.merchant

回答

0

這是正常的行爲,如果你的商家有一些商店提供相同的產品。

+0

感謝您的快速反應!對不起,完成了,是否可以調用反向'product.merchant'?本質上,它就像現實世界。商家有很多商店和很多產品,但是1個產品型號只屬於一個商家。 – 2012-03-02 08:22:51

+0

你可以定義'產品has_many:商家,:通過=>:商店'。然後,您將最終得到一個商品列表,其中應包含同一商家(可能是多次)的'product.merchants'。但是,這隻有在確保所有商家僅銷售他們自己的產品時纔有效。我建議添加另一個關係'產品belongs_to:商家',即使它有點多餘。然後你可以調用'product.merchant'。 – iltempo 2012-03-02 08:47:42

+0

但在最後一種情況下,我必須在產品模型中設置foreign_key?我覺得這也是多餘的。產品=>商家關係應該已經定義(儘管不是嚴格的)。 – 2012-03-02 08:50:50

0

您可以使用distinct

@products = current_user.merchant.products.distinct(:product_id) 
+0

'distinct'和'uniq'有什麼區別? – 2012-03-02 08:52:00

+0

與SQL不同。 'uniq'用紅寶石做。你用不同的方式更改SQL。不與'uniq' – shingara 2012-03-02 08:59:33