0

ProductモデルとがありProductParams、ここに製品 ID を格納し、列にいくつかの追加のパラメーター ( param) とパラメーター タイプを指定します。次のようになります。

id | type  | param
   |       |
1  | color | blue
1  | type  | hard
2  | color | blue
2  | type  | soft
.. | ..... | .....

で呼び出すと、最初の製品のみを取得するにはどうすればよいparams = [blue, hard]ですか?
とりあえず みたいなのを考えたんですけどProduct.joins{product_params}.where{product_params.param.in params}.uniq、あまりにも2位なblueので…

私は squeel gem を使用して SQL クエリを作成しますが、回答も squeel にある必要はありません。

編集
解決策を思いつきましたが、少し奇妙です:

Product.joins{product_params}.where{product_params.param.in params}.group{id}.having{count(product_params.param) == 2}

しかし、もっと優雅なものがあれば素晴らしいでしょう。

4

0 に答える 0