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.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (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.)