chartckick에서 원형 차트 구현(2개의 모델에 걸쳐 있는 데이터)
개요
가계부 WEB 앱 그리고 월별 및 카테고리별로 지출을 시각화하고 싶습니다!
→ 그래프를 간단하게 도입하고 싶다!
→chart.js라는 것이 있는 것 같다!
→하지만 기본적인 사용법 이외의 기사가 적지…
그래서, 나름대로 시행착오한 내용을 기사로 해 보았습니다.
덧붙여 도입이나 기본 기능에 대해서는 이하 기사를 참조해 주세요.
공식 github
도입 방법과 기본 기능
개발 환경
Ruby 2.7.4/Ruby on Rails 6.1.4/RSpec
Docker/Docker-compode/CircleCI(CI/CD)/Heroku/SendGrid(mailer)
완성된 이미지
다음 모델의 연관에서,
다음과 같은 그래프를 만들고 싶다.
Post(지출) 모델원에 카테고리와 월별로 정리한 데이터를 가시화한다.
그래프를 탭하면 카테고리 이름과 지출 소계가 표시됩니다.
즉 필요한 것은 Category.name, Post.price의 합계, Category.color 당.
Category와 Post의 2 모델에 걸쳐 있기 때문에, 귀찮을 것 같은….
만들고 싶은 데이터의 형태
일부 기사를 보면,
다음과 같은 하나의 모델에서 2 개의 컬럼을 꺼내는 형태의 취급이 많다.
<%= pie_chart RugbyWorldCupHostCountry.pluck(:held_at, :total_attendance) %>
2모델에 걸쳐 있는 경우는 어떻게 하면…?
… 조사해 보면
index(이번에 말하는 "category.name")와 value(이번에 말하는 곳의 "post.price") 배열이 되어 있다고 한다.
[[data1_index, data1_value], [data2_index, data2_value], … ]
여기까지 알면 후에는 간단할 것!
구현
이렇게 하면 적당히 @month 의 값을 바꾸어 전월의 그래프 등도 낼 수 있습니다.
controller/hoge.rb def month
family_category_ids = @relationship.category_ids
# 今月の1日を取得
@month = Time.zone.now.beginning_of_month
# 空の配列を用意
@pie_chart = []
# カテゴリ毎にループを回す
family_category_ids.each do |c_id|
@pie_chart.push(
[Category.find_by(id: c_id).name,
Post.where(category_id: c_id, payment_at: @month.all_month).sum(:price)]
)
end
# @pie_chartとは別にcolorsの配列も用意
@pie_chart_colors = Category.where(id: family_category_ids).map(&:color)
end
아래에서는 조금 스타일을 괴롭히고 있습니다.
Ruby 2.7.4/Ruby on Rails 6.1.4/RSpec
Docker/Docker-compode/CircleCI(CI/CD)/Heroku/SendGrid(mailer)
완성된 이미지
다음 모델의 연관에서,
다음과 같은 그래프를 만들고 싶다.
Post(지출) 모델원에 카테고리와 월별로 정리한 데이터를 가시화한다.
그래프를 탭하면 카테고리 이름과 지출 소계가 표시됩니다.
즉 필요한 것은 Category.name, Post.price의 합계, Category.color 당.
Category와 Post의 2 모델에 걸쳐 있기 때문에, 귀찮을 것 같은….
만들고 싶은 데이터의 형태
일부 기사를 보면,
다음과 같은 하나의 모델에서 2 개의 컬럼을 꺼내는 형태의 취급이 많다.
<%= pie_chart RugbyWorldCupHostCountry.pluck(:held_at, :total_attendance) %>
2모델에 걸쳐 있는 경우는 어떻게 하면…?
… 조사해 보면
index(이번에 말하는 "category.name")와 value(이번에 말하는 곳의 "post.price") 배열이 되어 있다고 한다.
[[data1_index, data1_value], [data2_index, data2_value], … ]
여기까지 알면 후에는 간단할 것!
구현
이렇게 하면 적당히 @month 의 값을 바꾸어 전월의 그래프 등도 낼 수 있습니다.
controller/hoge.rb def month
family_category_ids = @relationship.category_ids
# 今月の1日を取得
@month = Time.zone.now.beginning_of_month
# 空の配列を用意
@pie_chart = []
# カテゴリ毎にループを回す
family_category_ids.each do |c_id|
@pie_chart.push(
[Category.find_by(id: c_id).name,
Post.where(category_id: c_id, payment_at: @month.all_month).sum(:price)]
)
end
# @pie_chartとは別にcolorsの配列も用意
@pie_chart_colors = Category.where(id: family_category_ids).map(&:color)
end
아래에서는 조금 스타일을 괴롭히고 있습니다.
<%= pie_chart RugbyWorldCupHostCountry.pluck(:held_at, :total_attendance) %>
[[data1_index, data1_value], [data2_index, data2_value], … ]
이렇게 하면 적당히 @month 의 값을 바꾸어 전월의 그래프 등도 낼 수 있습니다.
controller/hoge.rb
def month
family_category_ids = @relationship.category_ids
# 今月の1日を取得
@month = Time.zone.now.beginning_of_month
# 空の配列を用意
@pie_chart = []
# カテゴリ毎にループを回す
family_category_ids.each do |c_id|
@pie_chart.push(
[Category.find_by(id: c_id).name,
Post.where(category_id: c_id, payment_at: @month.all_month).sum(:price)]
)
end
# @pie_chartとは別にcolorsの配列も用意
@pie_chart_colors = Category.where(id: family_category_ids).map(&:color)
end
아래에서는 조금 스타일을 괴롭히고 있습니다.
views/hoge.html.erb
<%= pie_chart @pie_chart,legend: {display: false}, donut: true, width: "200px", height: "200px", colors: @pie_chart_colors %>
사이고에게
이상입니다.
질문이나, 「그 밖에도 이런 실장 방법이 있어!」등 코멘트 받을 수 있으면 다행입니다.
누군가를 위해서라면 기쁩니다.
Reference
이 문제에 관하여(chartckick에서 원형 차트 구현(2개의 모델에 걸쳐 있는 데이터)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/matsu1226/items/aba89a37272c5bd95b80
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(chartckick에서 원형 차트 구현(2개의 모델에 걸쳐 있는 데이터)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/matsu1226/items/aba89a37272c5bd95b80텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)