質問編集履歴
3
タイトルを変更
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
[Rails]
|
1
|
+
[Rails] N+1問題と子要素条件検索の両立ができない
|
test
CHANGED
File without changes
|
2
テーブル修正
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
|
-
|
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で絞る前の結合済みのテーブルを追加 & 順番をわかりやすくした
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:1
|
123
|
+
→ Project:1は4番・5番、Project: 2は4番のタグが消えているためビューで全てタグが表示されない
|
94
124
|
|
95
125
|
|
96
126
|
|