質問編集履歴

2

本文作成

2022/05/07 00:52

投稿

IRIESS
IRIESS

スコア45

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,45 @@
1
- 関連モデルを含めwhere検索したのですが、期待する挙動になりません
1
+ 現在2ユーザーに分けアプリ作成中です。
2
+ ログインhostがuser一覧を取得する際に登録しているskillsが全く被らないuserのみ一覧で取得したいと考えています。
2
3
 
3
- 間違えて投稿してしまいましたので急いで編集中です
4
+ ```ruby
5
+ # User
6
+ has_many :user_skills
7
+ has_many :skills, through: :user_skills
8
+
9
+ # UserSkill
10
+ belongs_to :user
11
+ belongs_to :skill
12
+
13
+ # Host
14
+ has_many :host_skills
15
+ has_many :skills, through: :host_skills
16
+
17
+ # HostSKill
18
+ belongs_to :host
19
+ belongs_to :skill
20
+
21
+ # SKill
22
+ has_many :user_skills
23
+ has_many :users, through: :user_skills
24
+ has_many :host_skills
25
+ has_many :hosts, through: :host_skills
26
+ ```
27
+
28
+ 恥ずかしながら私が書いてみたのは以下のような感じです
29
+
30
+ ```ruby
31
+ host_skill_ids = []
32
+ current_api_host.host_skills.map {|skill| host_skill_ids.push(skill.skill_id)}
33
+
34
+ User.left_joins(:user_skills).includes(:user_skills).merge(UserSkill.where.not(skill_id: host_skill_ids))
35
+ ```
36
+
37
+ しかしこれだと
38
+ 検索されるべきではないuserがひっかかってしまいます
39
+ ```ruby
40
+ User Load (1.9ms) SELECT `users`.* FROM `users` LEFT OUTER JOIN `user_skills` ON `user_skills`.`user_id` = `users`.`id` WHERE `user_skills`.`skill_id` NOT IN (1, 2, 3...) ORDER BY RAND()
41
+
42
+ UserSkill Load (1.0ms) SELECT `user_skills`.* FROM `user_skills` WHERE `user_skills`.`user_id` IN (31, 17, 21, 13)
43
+ ```
44
+
45
+ ご教授よろしくお願い致します。

1

改善

2022/05/07 00:04

投稿

IRIESS
IRIESS

スコア45

test CHANGED
File without changes
test CHANGED
@@ -1 +1,3 @@
1
1
  関連モデルを含めたwhere検索をしたのですが、期待する挙動になりません。
2
+
3
+ 間違えて投稿してしまいましたので急いで編集中です