2012-03-02 9 views
0

は、私は、便宜上Rails - HABTMとhas_manyの併用による効果?

Shop habtm Products 
Product habtm Shops 

Shop belongs_to Merchant 

を関連性を持って、私も自分の製品のコントローラで

Merchant has_many :products, :through=>:shops 

、I <%=debug @products %>、コレクションが複数含まれて

@products = current_user.merchant.products

を宣言しました同じオブジェクトのコピー。

これは正常なのですか、またはHABTMとhas_manyを一緒に宣言して自分自身を嫌っていますか?

これが正常な場合は、重複したエントリを表示せずに製品を呼び出す方法がありますか?

ありがとうございます。

更新

私はhabtmShopsProductsの間にあるので、これは大丈夫でなければなりません実現。 Merchant has_many Products。製品モデル内に外部キーを設定せずにproduct.merchantのようなものを呼び出すことは可能ですか?

答えて

0

これは、あなたのマーチャントに同じ製品を提供するいくつかのお店がある場合の通常の動作です。

+0

感謝を!終了して申し訳ありませんが、 'product.merchant'の逆を呼び出すことは可能ですか?本質的に、それは現実の世界のようです。商人には多くの商店と数多くの商品がありますが、1つの商品モデルは1つの商人にしか属していません。 –

+0

'Product has_many:merchants、:through =>:shops'を定義することができます。次に、同じ商人を含むべきである 'product.merchants'の上の商人のリストで終わるでしょう(多分複数回)。しかし、これは、すべての販売者が自社製品のみを販売していることを保証する場合にのみ有効です。少し冗長であっても、もう一つの関係「Product belongs_to:merchant」を追加することをお勧めします。それで 'product.merchant'を呼び出すことができます。 – iltempo

+0

最後のケースでは、私はProductモデル内にforeign_keyを設定する必要がありますか?私はそれも冗長であると感じます。商品=>販売者関係は既に定義されているはずです(ただし厳密にはそうではありません)。 –

0

あなたはdistinct使用することができます。迅速な対応のための

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

'distinct'と' uniq'の違いは何ですか? –

+0

SQLとは異なります。 'uniq'ルビーでやる。 SQLを個別に変更します。 'uniq'ではなく – shingara

関連する問題