回答編集履歴

1

コメントへの回答

2021/03/12 07:31

投稿

neko_daisuki
neko_daisuki

スコア2090

test CHANGED
@@ -49,3 +49,41 @@
49
49
  WHERE `languages`.`id` IN (1, 2)
50
50
 
51
51
  ```
52
+
53
+
54
+
55
+
56
+
57
+ ### 追記
58
+
59
+
60
+
61
+ いまテーブルが用意できないので確認できないのですが、これでどうでしょう
62
+
63
+
64
+
65
+ ```ruby
66
+
67
+ User.select("users.*, COUNT(*) AS languages_count")
68
+
69
+ .joins(:user_languages)
70
+
71
+ .where(user_languages: { language_id: params[:language_ids] })
72
+
73
+ .group("user_languages.user_id")
74
+
75
+ .having(languages_count: params[:language_ids].length)
76
+
77
+ ```
78
+
79
+
80
+
81
+ 1.中間テーブルの language_id が params[:language_ids] に含まれるものに絞り込む
82
+
83
+ 2.中間テーブルのuser_idでグループ化してその数をカウント(ユーザーごとの一致したlanguage数)
84
+
85
+ 3.カウントがparams[:language_ids]の数と一致するか(完全に含むか)で絞り込む
86
+
87
+
88
+
89
+ という動作にしているつもりです。