質問編集履歴

3

タイトルを変更

2021/07/20 23:16

投稿

Zray
Zray

スコア0

test CHANGED
@@ -1 +1 @@
1
- [Rails] eager_loadで親要素を子要素条件で絞ると子要素が消えてしまう
1
+ [Rails] N+1問題と子要素条件検索の両立がきない
test CHANGED
File without changes

2

テーブル修正

2021/07/20 23:16

投稿

Zray
Zray

スコア0

test CHANGED
File without changes
test CHANGED
@@ -72,8 +72,6 @@
72
72
 
73
73
 
74
74
 
75
-
76
-
77
75
  projects.id|project_tags.tag_id|
78
76
 
79
77
  |:--|:--:|
@@ -94,12 +92,20 @@
94
92
 
95
93
  |2|4|
96
94
 
97
-
98
-
99
- WHERE project_tags.tag_id IN [1,2,3]で絞り込み
95
+ |3|4|
96
+
97
+ |3|5|
98
+
99
+ |3|6|
100
+
101
+
100
102
 
101
103
 
102
104
 
105
+ tag_id: [1,2,3]で絞り込み
106
+
107
+
108
+
103
109
 
104
110
 
105
111
 
@@ -120,6 +126,8 @@
120
126
 
121
127
 
122
128
 
129
+
130
+
123
131
  → Project:1は4番・5番、Project: 2は4番のタグが消えているためビューで全てタグが表示されない
124
132
 
125
133
 

1

WHEREで絞る前の結合済みのテーブルを追加 & 順番をわかりやすくした

2021/07/20 04:14

投稿

Zray
Zray

スコア0

test CHANGED
File without changes
test CHANGED
@@ -4,53 +4,57 @@
4
4
 
5
5
  プロジェクトごとにタグが複数ついていて、タグと案件番号と顧客会社名によるプロジェクト検索機能を作りたい。
6
6
 
7
+ ######テーブルは下記(質問に関係ない情報は省略)
8
+
9
+ 1←多(矢印の向きがbelongs_to)
10
+
11
+ projects → clients
12
+
13
+ projects ← project_tags → tags(Active Hash)
14
+
15
+
16
+
17
+ [projects]
18
+
19
+ id(PK) integer
20
+
21
+ code string (「案件番号」と呼ぶ、「302-5」みたいな数字とハイフンの文字列)
22
+
23
+ client_id(FK) integer
24
+
25
+
26
+
27
+ [clients]
28
+
29
+ id(PK) integer
30
+
31
+ company_name integer (株式会社○○など)
32
+
33
+
34
+
35
+ [project_tags](中間テーブル)
36
+
37
+ id(PK) integer
38
+
39
+ project_id(FK) integer
40
+
41
+ tag_id(FK) integer
42
+
43
+
44
+
45
+ [tags](Active Hash)11個ある
46
+
47
+ id(PK)
48
+
49
+ name
50
+
51
+
52
+
7
53
  ######検索機能の詳細
8
54
 
9
55
  案件番号は前方一致、顧客会社名は部分一致、タグは1,2,3を選択した場合タグIDとして1,2,3のいずれかを含む案件がヒット
10
56
 
11
- ######テーブルは下記(質問に関係ない情報は省略)
57
+
12
-
13
- 1←多(矢印の向きがbelongs_to)
14
-
15
- projects → clients
16
-
17
- projects ← project_tags → tags(Active Hash)
18
-
19
-
20
-
21
- [projects]
22
-
23
- id(PK) integer
24
-
25
- code string (「案件番号」と呼ぶ、「302-5」みたいな数字とハイフンの文字列)
26
-
27
- client_id(FK) integer
28
-
29
-
30
-
31
- [clients]
32
-
33
- id(PK) integer
34
-
35
- company_name integer (株式会社○○など)
36
-
37
-
38
-
39
- [project_tags](中間テーブル)
40
-
41
- id(PK) integer
42
-
43
- project_id(FK) integer
44
-
45
- tag_id(FK) integer
46
-
47
-
48
-
49
- [tags](Active Hash)11個ある
50
-
51
- id(PK)
52
-
53
- name
54
58
 
55
59
 
56
60
 
@@ -68,12 +72,38 @@
68
72
 
69
73
 
70
74
 
75
+
76
+
77
+ projects.id|project_tags.tag_id|
78
+
79
+ |:--|:--:|
80
+
81
+ |1|1|
82
+
83
+ |1|2|
84
+
85
+ |1|3|
86
+
87
+ |1|4|
88
+
89
+ |1|5|
90
+
91
+ |2|2|
92
+
93
+ |2|3|
94
+
95
+ |2|4|
96
+
97
+
98
+
71
99
  WHERE project_tags.tag_id IN [1,2,3]で絞り込み
72
100
 
73
101
 
74
102
 
75
103
 
76
104
 
105
+
106
+
77
107
  projects.id|project_tags.tag_id|
78
108
 
79
109
  |:--|:--:|
@@ -90,7 +120,7 @@
90
120
 
91
121
 
92
122
 
93
- → Project:14番のタグが消えているためビューで4番のタグが表示されない
123
+ → Project:14番・5番、Project: 2は4番のタグが消えているためビューで全てタグが表示されない
94
124
 
95
125
 
96
126