回答編集履歴
1
コメントへの回答
answer
CHANGED
@@ -23,4 +23,23 @@
|
|
23
23
|
INNER JOIN `user_languages` ON `user_langages`.`user_id` = `users`.`id`
|
24
24
|
INNER JOIN `languages` ON `languages`.`id` = `user_languages`.`language_id`
|
25
25
|
WHERE `languages`.`id` IN (1, 2)
|
26
|
-
```
|
26
|
+
```
|
27
|
+
|
28
|
+
|
29
|
+
### 追記
|
30
|
+
|
31
|
+
いまテーブルが用意できないので確認できないのですが、これでどうでしょう
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
User.select("users.*, COUNT(*) AS languages_count")
|
35
|
+
.joins(:user_languages)
|
36
|
+
.where(user_languages: { language_id: params[:language_ids] })
|
37
|
+
.group("user_languages.user_id")
|
38
|
+
.having(languages_count: params[:language_ids].length)
|
39
|
+
```
|
40
|
+
|
41
|
+
1.中間テーブルの language_id が params[:language_ids] に含まれるものに絞り込む
|
42
|
+
2.中間テーブルのuser_idでグループ化してその数をカウント(ユーザーごとの一致したlanguage数)
|
43
|
+
3.カウントがparams[:language_ids]の数と一致するか(完全に含むか)で絞り込む
|
44
|
+
|
45
|
+
という動作にしているつもりです。
|