2012-03-02 95 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