teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

タイトルを変更

2021/07/20 23:16

投稿

Zray
Zray

スコア0

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

2

テーブル修正

2021/07/20 23:16

投稿

Zray
Zray

スコア0

title CHANGED
File without changes
body CHANGED
@@ -35,7 +35,6 @@
35
35
 
36
36
  eager_loadでJOINする
37
37
 
38
-
39
38
  projects.id|project_tags.tag_id|
40
39
  |:--|:--:|
41
40
  |1|1|
@@ -46,9 +45,13 @@
46
45
  |2|2|
47
46
  |2|3|
48
47
  |2|4|
48
+ |3|4|
49
+ |3|5|
50
+ |3|6|
49
51
 
50
- WHERE project_tags.tag_id IN [1,2,3]で絞り込み
51
52
 
53
+ tag_id: [1,2,3]で絞り込み
54
+
52
55
 
53
56
 
54
57
  projects.id|project_tags.tag_id|
@@ -59,6 +62,7 @@
59
62
  |2|2|
60
63
  |2|3|
61
64
 
65
+
62
66
  → Project:1は4番・5番、Project: 2は4番のタグが消えているためビューで全てタグが表示されない
63
67
 
64
68
  ### 該当のソースコード

1

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

2021/07/20 04:14

投稿

Zray
Zray

スコア0

title CHANGED
File without changes
body CHANGED
@@ -1,8 +1,6 @@
1
1
  ### 前提・実現したいこと
2
2
  Ruby On Rails 5で社内のみで使う業務管理システムを作成中。
3
3
  プロジェクトごとにタグが複数ついていて、タグと案件番号と顧客会社名によるプロジェクト検索機能を作りたい。
4
- ######検索機能の詳細
5
- 案件番号は前方一致、顧客会社名は部分一致、タグは1,2,3を選択した場合タグIDとして1,2,3のいずれかを含む案件がヒット
6
4
  ######テーブルは下記(質問に関係ない情報は省略)
7
5
  1←多(矢印の向きがbelongs_to)
8
6
  projects → clients
@@ -26,6 +24,10 @@
26
24
  id(PK)
27
25
  name
28
26
 
27
+ ######検索機能の詳細
28
+ 案件番号は前方一致、顧客会社名は部分一致、タグは1,2,3を選択した場合タグIDとして1,2,3のいずれかを含む案件がヒット
29
+
30
+
29
31
  ### 発生している問題の例
30
32
  ![ベン図](9b96bd0969370bfe0d8950d20482c564.jpeg)
31
33
  赤は検索フォームで選択されたtag_id
@@ -33,9 +35,22 @@
33
35
 
34
36
  eager_loadでJOINする
35
37
 
38
+
39
+ projects.id|project_tags.tag_id|
40
+ |:--|:--:|
41
+ |1|1|
42
+ |1|2|
43
+ |1|3|
44
+ |1|4|
45
+ |1|5|
46
+ |2|2|
47
+ |2|3|
48
+ |2|4|
49
+
36
50
  WHERE project_tags.tag_id IN [1,2,3]で絞り込み
37
51
 
38
52
 
53
+
39
54
  projects.id|project_tags.tag_id|
40
55
  |:--|:--:|
41
56
  |1|1|
@@ -44,7 +59,7 @@
44
59
  |2|2|
45
60
  |2|3|
46
61
 
47
- → Project:14番のタグが消えているためビューで4番のタグが表示されない
62
+ → Project:14番・5番、Project: 2は4番のタグが消えているためビューで全てタグが表示されない
48
63
 
49
64
  ### 該当のソースコード
50
65
  ※注意:なぜindexではなくallなのか