0

各製品にカテゴリがあるとしましょう。ユーザーに、ユーザーが興味を持っているいくつかのカテゴリを選択してもらい、同じカテゴリを持つ製品を見つけてもらいたいです。これは、Quora、Stumbleupon、Pinterest が行うことと似ています。

Rails でこのデータベース構造を設定する最良の方法は何でしょうか? User、Product、Category の 3 つのテーブルを作成し、User has many Categories & Product has many Categories の関係を作成する必要がありますか?

これに関する問題は、Users と Products の各行に対して、Categories の新しいインスタンスを参照するのではなく、作成するのではないでしょうか?

*追加: サブカテゴリが必要な場合はどうすればよいですか? たとえば、ユーザーがテクノロジーを選択した場合、さらに Web 開発、モバイル開発、ハードウェアなどから選択するよう求められる可能性があります。

4

1 に答える 1

2

そのような「推奨」は非常に簡単に行うことができます。

このようなものが動作するはずです (注意: このコードはテストしていませんが、精神的には正しいです):

def recommended_products
  joins(:categories, :products).where("product_id not in (?)", self.products)
end

各ビットの説明:

joins(:categories, :products): これは、ユーザー、製品、およびカテゴリの SQL 結合を行います。これにより、各ユーザー、製品、カテゴリの組み合わせが独自の行にある「テーブル」が得られます。

.where("product_id not in (?)", self.products): SQL where 句を追加して、現在のユーザーの製品リストに製品があるすべての行を除外します。

アソシエーションは問題ではありません。自分で新しいインスタンスを作成するコードを記述した場合にのみ、新しいインスタンスを自分で作成することはありません。

サブカテゴリについては、それ自体が簡単に投稿全体になるため、それを独自の質問にする方がよいと思います。

于 2012-12-31T21:21:46.467 に答える