質問編集履歴
1
他モデルのクラスメソッドで意図するデータを得る事はできました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -88,13 +88,9 @@
|
|
88
88
|
|
89
89
|
def self.group_monthly_chart_data
|
90
90
|
|
91
|
-
# {"A": {[2019, 4]=>○○○○, [2019, 5]=>○○○○, …}, "B": … } のようにまとめたいです
|
91
|
+
# {"A": {[2019, 4]=>○○○○, [2019, 5]=>○○○○, …}, "B": … } のようにまとめたいのですが...
|
92
92
|
|
93
|
-
group_year_and_month_minute_data = Overtime.joins(:user).group("
|
93
|
+
group_year_and_month_minute_data = Overtime.joins(:user).select("overtimes*, users*").group(:group).group("extract(year from date)").group("extract(month from date)").sum(:work_time_minute)
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
94
|
|
99
95
|
end
|
100
96
|
|
@@ -106,15 +102,73 @@
|
|
106
102
|
|
107
103
|
|
108
104
|
|
109
|
-
|
110
|
-
|
111
105
|
### 発生している問題
|
112
106
|
|
113
107
|
月毎の合計残業時間をまとめるクラスメソッドを、個人毎の場合は上記の通り作成できました。
|
114
108
|
|
115
|
-
一方グループ毎の場合は、
|
109
|
+
一方グループ毎の場合は、上記のコードでは、以下のエラーメッセージが出ます。
|
116
110
|
|
117
|
-
|
111
|
+
```
|
112
|
+
|
113
|
+
pry(main)> Overtime.joins(:user).select("overtimes*, users*").group(:group).group("extract(year from date)").group("extract(month from date)").sum(:work_time_minute) (2.4ms) SELECT SUM(`overtimes`.`work_time_minute`) AS sum_work_time_minute, `group` AS group, extract(year from date) AS extract_year_from_date, extract(month from date) AS extract_month_from_date FROM `overtimes` INNER JOIN `users` ON `users`.`id` = `overtimes`.`user_id` GROUP BY `group`, extract(year from date), extract(month from date)
|
114
|
+
|
115
|
+
ActiveRecord::StatementInvalid: Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'group, extract(year from date) AS extract_year_from_date, extract(month from dat' at line 1: SELECT SUM(`overtimes`.`work_time_minute`) AS sum_work_time_minute, `group` AS group, extract(year from date) AS extract_year_from_date, extract(month from date) AS extract_month_from_date FROM `overtimes` INNER JOIN `users` ON `users`.`id` = `overtimes`.`user_id` GROUP BY `group`, extract(year from date), extract(month from date)
|
116
|
+
|
117
|
+
```
|
118
|
+
|
119
|
+
|
120
|
+
|
121
|
+
### 試した事
|
122
|
+
|
123
|
+
Overtimeのクラスメソッドとして記述した結果、上記のようにエラーが出たため、Userのクラスメソッドとして記述した場合はどうなのかを試してみました。
|
124
|
+
|
125
|
+
すると、以下のように望んでいる形に近しい結果が得られました。
|
126
|
+
|
127
|
+
```
|
128
|
+
|
129
|
+
pry(main)> User.joins(:overtimes).select("overtimes*, users*").group(:group).group("extract(year from date)").group("extract(month from date)").sum(:work_time_minute)
|
130
|
+
|
131
|
+
(4.0ms) SELECT SUM(work_time_minute) AS sum_work_time_minute, `users`.`group` AS users_group, extract(year from date) AS extract_year_from_date, extract(month from date) AS extract_month_from_date FROM `users` INNER JOIN `overtimes` ON `overtimes`.`user_id` = `users`.`id` GROUP BY `users`.`group`, extract(year from date), extract(month from date)
|
132
|
+
|
133
|
+
=> {["A", 2019, 4]=>1828,
|
134
|
+
|
135
|
+
["A", 2019, 5]=>6418,
|
136
|
+
|
137
|
+
["A", 2019, 6]=>6247,
|
138
|
+
|
139
|
+
["A", 2019, 7]=>4820,
|
140
|
+
|
141
|
+
["A", 2019, 8]=>4033,
|
142
|
+
|
143
|
+
["A", 2019, 9]=>6835,
|
144
|
+
|
145
|
+
["A", 2019, 10]=>6717,
|
146
|
+
|
147
|
+
["A", 2019, 11]=>5469,
|
148
|
+
|
149
|
+
["A", 2019, 12]=>4882,
|
150
|
+
|
151
|
+
["A", 2020, 1]=>4365,
|
152
|
+
|
153
|
+
["A", 2020, 2]=>6504,
|
154
|
+
|
155
|
+
["A", 2020, 3]=>5693,
|
156
|
+
|
157
|
+
["A", 2020, 4]=>2593,
|
158
|
+
|
159
|
+
["B", 2019, 4]=>1414,
|
160
|
+
|
161
|
+
["B", 2019, 5]=>4339,
|
162
|
+
|
163
|
+
["B", 2019, 6]=>5215,
|
164
|
+
|
165
|
+
["B", 2019, 7]=>3992, ...
|
166
|
+
|
167
|
+
```
|
168
|
+
|
169
|
+
|
170
|
+
|
171
|
+
データの性格上、UserではなくOvertimeのクラスメソッドで上記の結果を得たいのですが、どのように記述すれば同様の結果が得られるかわからないため、お手数ですがご教示いただきたいです。
|
118
172
|
|
119
173
|
|
120
174
|
|
@@ -122,4 +176,6 @@
|
|
122
176
|
|
123
177
|
### 参考にした情報
|
124
178
|
|
125
|
-
[参考サイト](https://qiita.com/eRy-sk/items/a1bc2714eeb55e05bcc0)
|
179
|
+
[参考サイト1](https://qiita.com/eRy-sk/items/a1bc2714eeb55e05bcc0)
|
180
|
+
|
181
|
+
[参考サイト2](https://qiita.com/yuyasat/items/c2ad37b5a24a58ee3d30)
|