質問編集履歴

2 質問にモデルを追加

seesaajira-

seesaajira- score 62

2017/04/12 18:40  投稿

ransackでの抽出結果からHighchartsを使ってグラフを作成する良い方法?
```ここに言語を入力  
モデル  
【game.rb】  
 belongs_to :member  
 
【member.rb】  
 has_many :games  
```  
 
 
データからransackで日付の期間を指定してデータを抽出します
名前はmemeberのnameを表示します  
|日付|名前|・・・|
|:--|:--:|--:|
|3/1|AAA|・・・|
|3/2|AAA|・・・|
|3/2|AAA|・・・|
|3/3|BBB|・・・|
|3/4|BBB|・・・|
|3/5|CCC|・・・|
```ここに言語を入力
 def index
 #ransackで日付の期間で抽出
   @q = Game.ransack(params[:q])
   @q.game_date_gteq = Time.now.strftime("%Y-01-01") if @q.game_date_gteq.nil?
   @q.game_date_lteq = Time.now.strftime("%Y-12-31") if @q.game_date_lteq.nil?   
   @games = @q.result(distinct: true)
 #Highchartsでグラフを作成
   #ハッシュを作成
   @@members={}
   @games.sort.each do |g|
     if @@members.key?(g.member.name) #名前の重複チェック
       @@members[g.member.name] = @@members[g.member.name] +1 #名前が存在する場合はカウントアップ
     else
       @@members[g.member.name] = 1 #名前が存在しない場合はハッシュに追加       
     end
   end     
   #Highcherts用の変数にハッシュの値を格納
   category =[] 
   current_quantity = []   
   @@members.each do |m1,m2|
     category<<(m1)
     current_quantity<<(m2)
   end
 #Highchartsの設定
   @graph = LazyHighCharts::HighChart.new('graph') do |f|
     f.title(text: '参加数の推移')
     f.xAxis(categories: category)
     f.series(name: '参加数', data: current_quantity)
     f.chart(type: "bar") #棒グラフ
   end
```
以下のようにHighchartsでグラフに表示できましたが、
良い考えが浮かばず、力技となってしまいました。
他に良い方法はありますでしょうか?
![イメージ説明](e150c232ad5f74510b479f9de9c6d37e.gif)
  • Ruby on Rails

    9608 questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • Highcharts

    44 questions

    HighchartはHTML、SVG、VMLを使ったJavascriptの描写用ライブラリです。

1 題名変更

seesaajira-

seesaajira- score 62

2017/04/12 16:35  投稿

ransackでの抽出結果からHighchartsを使ってグラフを作成したい
ransackでの抽出結果からHighchartsを使ってグラフを作成する良い方法?
データからransackで日付の期間を指定してデータを抽出します
|日付|名前|・・・|
|:--|:--:|--:|
|3/1|AAA|・・・|
|3/2|AAA|・・・|
|3/2|AAA|・・・|
|3/3|BBB|・・・|
|3/4|BBB|・・・|
|3/5|CCC|・・・|
```ここに言語を入力
def index
#ransackで日付の期間で抽出
@q = Game.ransack(params[:q])
@q.game_date_gteq = Time.now.strftime("%Y-01-01") if @q.game_date_gteq.nil?
@q.game_date_lteq = Time.now.strftime("%Y-12-31") if @q.game_date_lteq.nil?
@games = @q.result(distinct: true)
#Highchartsでグラフを作成
#ハッシュを作成
@@members={}
@games.sort.each do |g|
if @@members.key?(g.member.name) #名前の重複チェック
@@members[g.member.name] = @@members[g.member.name] +1 #名前が存在する場合はカウントアップ
else
@@members[g.member.name] = 1 #名前が存在しない場合はハッシュに追加
end
end
#Highcherts用の変数にハッシュの値を格納
category =[]
current_quantity = []
@@members.each do |m1,m2|
category<<(m1)
current_quantity<<(m2)
end
#Highchartsの設定
@graph = LazyHighCharts::HighChart.new('graph') do |f|
f.title(text: '参加数の推移')
f.xAxis(categories: category)
f.series(name: '参加数', data: current_quantity)
f.chart(type: "bar") #棒グラフ
end
```
以下のようにHighchartsでグラフに表示できましたが、
良い考えが浮かばず、力技となってしまいました。
他に良い方法はありますでしょうか?
![イメージ説明](e150c232ad5f74510b479f9de9c6d37e.gif)
  • Ruby on Rails

    9608 questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • Highcharts

    44 questions

    HighchartはHTML、SVG、VMLを使ったJavascriptの描写用ライブラリです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る