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

回答編集履歴

7

ミス修正

2016/09/28 18:56

投稿

退会済みユーザー
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.months_ago(back)...current_month.next_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

コードのミスを修正

2016/09/28 18:56

投稿

退会済みユーザー
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.months_ago(back)...current_month.next_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

誤字修正

2016/09/28 18:49

投稿

退会済みユーザー
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 - a.month + b.month
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

間違いを修正

2016/09/28 18:37

投稿

退会済みユーザー
answer CHANGED
@@ -74,7 +74,7 @@
74
74
 
75
75
  private
76
76
 
77
- def fetch_during_month_data(start_month=Date.today.month-2,end_month=Date.today.month)
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

さらに良い回答に修正

2016/09/28 18:34

投稿

退会済みユーザー
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

補足

2016/09/28 18:32

投稿

退会済みユーザー
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

情報修正

2016/09/28 17:38

投稿

退会済みユーザー
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