回答編集履歴
7
ミス修正
answer
CHANGED
@@ -79,7 +79,7 @@
|
|
79
79
|
back_months = (end_month.year - start_month.year)*12 - start_month.month + end_month.month
|
80
80
|
(0..back_months).map do |back|
|
81
81
|
current_month = current_month.months_ago(back)
|
82
|
-
range = current_month.
|
82
|
+
range = current_month...current_month.next_month
|
83
83
|
User.where(user_id: @user.id, created_at:range).count
|
84
84
|
end
|
85
85
|
end
|
6
コードのミスを修正
answer
CHANGED
@@ -59,7 +59,8 @@
|
|
59
59
|
def fetch_during_month_data(end_month=Date.today.month,back_months = 2 ,year=Date.today.year)
|
60
60
|
current_month = Date.new(year,end_month)
|
61
61
|
(0..back_months).map do |back|
|
62
|
+
current_month = current_month.months_ago(back)
|
62
|
-
range = current_month.
|
63
|
+
range = current_month...current_month.next_month
|
63
64
|
User.where(user_id: @user.id, created_at:range).count
|
64
65
|
end
|
65
66
|
end
|
@@ -77,6 +78,7 @@
|
|
77
78
|
def fetch_during_month_data(start_month=Date.today.months_ago(2),end_month=Date.today)
|
78
79
|
back_months = (end_month.year - start_month.year)*12 - start_month.month + end_month.month
|
79
80
|
(0..back_months).map do |back|
|
81
|
+
current_month = current_month.months_ago(back)
|
80
82
|
range = current_month.months_ago(back)...current_month.next_month
|
81
83
|
User.where(user_id: @user.id, created_at:range).count
|
82
84
|
end
|
5
誤字修正
answer
CHANGED
@@ -75,7 +75,7 @@
|
|
75
75
|
private
|
76
76
|
|
77
77
|
def fetch_during_month_data(start_month=Date.today.months_ago(2),end_month=Date.today)
|
78
|
-
back_months = (end_month.year - start_month.year)*12 -
|
78
|
+
back_months = (end_month.year - start_month.year)*12 - start_month.month + end_month.month
|
79
79
|
(0..back_months).map do |back|
|
80
80
|
range = current_month.months_ago(back)...current_month.next_month
|
81
81
|
User.where(user_id: @user.id, created_at:range).count
|
4
間違いを修正
answer
CHANGED
@@ -74,7 +74,7 @@
|
|
74
74
|
|
75
75
|
private
|
76
76
|
|
77
|
-
def fetch_during_month_data(start_month=Date.today.
|
77
|
+
def fetch_during_month_data(start_month=Date.today.months_ago(2),end_month=Date.today)
|
78
78
|
back_months = (end_month.year - start_month.year)*12 - a.month + b.month
|
79
79
|
(0..back_months).map do |back|
|
80
80
|
range = current_month.months_ago(back)...current_month.next_month
|
@@ -84,4 +84,4 @@
|
|
84
84
|
|
85
85
|
```
|
86
86
|
|
87
|
-
でできます。
|
87
|
+
とすることでできます。
|
3
さらに良い回答に修正
answer
CHANGED
@@ -48,4 +48,40 @@
|
|
48
48
|
end
|
49
49
|
|
50
50
|
```
|
51
|
-
とします。
|
51
|
+
とします。
|
52
|
+
|
53
|
+
追記
|
54
|
+
|
55
|
+
上記コードは,年次ごとにはわかりやすいのですが,年をまたげないので年をまたぐ必要がある場合には`fetch_during_month_data`を以下のように修正します。
|
56
|
+
|
57
|
+
|
58
|
+
```ruby
|
59
|
+
def fetch_during_month_data(end_month=Date.today.month,back_months = 2 ,year=Date.today.year)
|
60
|
+
current_month = Date.new(year,end_month)
|
61
|
+
(0..back_months).map do |back|
|
62
|
+
range = current_month.months_ago(back)...current_month.next_month
|
63
|
+
User.where(user_id: @user.id, created_at:range).count
|
64
|
+
end
|
65
|
+
end
|
66
|
+
```
|
67
|
+
|
68
|
+
期間指定したい場合は,
|
69
|
+
|
70
|
+
```ruby
|
71
|
+
def main_action
|
72
|
+
@this_month,@last_month,@before_last_month = fetch_during_month_data
|
73
|
+
end
|
74
|
+
|
75
|
+
private
|
76
|
+
|
77
|
+
def fetch_during_month_data(start_month=Date.today.month-2,end_month=Date.today.month)
|
78
|
+
back_months = (end_month.year - start_month.year)*12 - a.month + b.month
|
79
|
+
(0..back_months).map do |back|
|
80
|
+
range = current_month.months_ago(back)...current_month.next_month
|
81
|
+
User.where(user_id: @user.id, created_at:range).count
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
```
|
86
|
+
|
87
|
+
でできます。
|
2
補足
answer
CHANGED
@@ -27,4 +27,25 @@
|
|
27
27
|
def fetch_monthly_data(range)
|
28
28
|
User.where(user_id: @user.id, created_at:range).count
|
29
29
|
end
|
30
|
-
```
|
30
|
+
```
|
31
|
+
|
32
|
+
もしくはfetch_monthly_data(range)はまとめてしまって
|
33
|
+
|
34
|
+
```ruby
|
35
|
+
|
36
|
+
def main_action
|
37
|
+
@this_month,@last_month,@before_last_month = fetch_during_month_data
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def fetch_during_month_data(start_month=Date.today.month-2,end_month=Date.today.month,year=Date.today.year)
|
43
|
+
end_month.downto(start_month).map do |target_month|
|
44
|
+
current_month = Date.new(year,target_month)
|
45
|
+
range = current_month...current_month.next_month
|
46
|
+
User.where(user_id: @user.id, created_at:range).count
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
```
|
51
|
+
とします。
|
1
情報修正
answer
CHANGED
@@ -6,8 +6,8 @@
|
|
6
6
|
.3個で不等号のみ
|
7
7
|
|
8
8
|
を考え,実際にサーバにどのようなqueryが投げられているか確認すると,無駄を削減できると思います。
|
9
|
-
また,共通の処理を関数に切り出し,いいかもしれません。私は以下のように特定の月次ではなく汎用性を高くします。
|
9
|
+
また,共通の処理を関数に切り出し,いいかもしれません。私は以下のように特定の月次ではなく任意の区間を指定できるような実装にして汎用性を高くします。
|
10
|
-
もし月次の定義がずれていた場合は,適宣
|
10
|
+
もし月次の定義がずれていた場合は,適宣補完していただけると幸いです。
|
11
11
|
|
12
12
|
```ruby
|
13
13
|
|