Rails Datetime 형식의 열 값을 날짜(mm/dd/yyyy) 단위로 집계하는 방법
소개
gem chatkick을 사용해, 값을 일자(mm/dd/yyyy)마다 카운트하려고 했을 때에, 빠져 버렸으므로 그 비망록이 됩니다.
개요
하고 싶었던 것은 간단 그래프 표시 gem 'charkick'을 사용해, 테이블의 값을 일자 단위로 카운트해 표시하고 싶었다.
그건 그렇고, charkick의 1 차 정보는 여기.
또한 charkick을 사용하여 날짜 단위로 집계하려면 gem 'groupdate'을 사용하는 것이 가장 좋은 방법입니다.
소개
아래의 기사를 참고로 charkick을 도입했습니다
ー Rails 메모(29) : Chartkick에서 쉽게 그래프를 그리기
여기에서 본제
부딪힌 문제
오류 발생
ActiveRecord::Base.default_timezone must be :utc to use Groupdate
아무래도 timezone가 UTC가 아니면 안되는 것 같다. 앱의 timezone을 tokyo로 하고 있었지만, 어디까지나 tokyo 그대로 카운트하고 싶다.
application.rb
class Application < Rails::Application
## 途中略
config.time_zone = 'Tokyo'
end
대응책
groupdate의 메소드 group_by_day 를 사용하면 에러의 회피를 할 수 없고, 어쩔 수 없이 포기하는 것.
덧붙여서 에러가 나와 있던 코드는 이하.
user_controller.rb
class UsersController < ApplicationController
## 途中略
def show
@data2 = Message.where(user_id: current_user.id).group_by_day(:created_at).count
## 途中略
end
end
user_controller.rb
class UsersController < ApplicationController
## 途中略
def show
# messageテーブル値の取得
data2 = Message.where(user_id: current_user.id)
# 配列の宣言
c = []
# data2の値を日付(mm/dd/yyyy)形式で取得し配列に格納
data2.each do |d|
c << d.created_at.strftime('%Y%m%d').to_s
end
# 配列に含まれている重複している値を数える
@data2 = c.each_with_object(Hash.new(0)){|v,o| o[v]+=1}
@today = Date.today
@lastmonth_today = @today.prev_day(14)
end
end
더 좋은 글을 쓸 수 있을지도 모릅니다만, 일단 이것으로 일자 단위로의 카운트가 생겼습니다.
덧붙여서 표시 측의 HTML 이하
show.html.haml.rb
.learning-curve
# 途中略
.learning-curve_graph
= line_chart @data2, width: "100%", height: "300px",min: 0, max: 20, xmin: @lastmonth_today, xmax: @today,label: "Value",xtitle: "日付",ytitle: "登録件数"
결과
무사히 일자 단위로의 카운트에 성공해, 그래프의 표시가 생겼다.
Reference
이 문제에 관하여(Rails Datetime 형식의 열 값을 날짜(mm/dd/yyyy) 단위로 집계하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/apukasukabian/items/5e57ca1060538c36547c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)