質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails

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

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

Q&A

解決済

2回答

3404閲覧

データベースのデータを配列とハッシュを使ってグラフにしたい

tuvalu

総合スコア136

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails

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

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

0グッド

0クリップ

投稿2016/08/12 08:18

編集2016/08/12 11:53

Ruby on Rails 初心者です。
ただいま、Ruby on Rails で、グラフを表示したくて、この2、3日ネットで検索しながら
方法を探してきましたが、ハードルが高くて、息を飲んでいるところです。

元々、このようなデータを持っています。
日付けと、もも肉相場、むね肉相場、と体相場と、もも肉販売量、むね肉販売量、と体販売量 です。
keisaiday,smomo,smune,stotai,hmomo,hmune,htotai
2016-08-02,591,235,285,126,109,7
2016-08-03,586,237,285,112,116,5
2016-08-04,0,0,285,0,0,6
2016-08-05,588,239,285,107,110,5
2016-08-06,581,236,285,86,84,7
2016-08-07,579,235,285,0,0,0
2016-08-09,589,240,285,129,107,7
2016-08-10,596,240,285,106,86,5

これを、Chartkick というグラフで表示しようとしています。グラフは問題なく動いています。
ネットで調べてここまではできています。やりたいことのイメージは、正にこの通りです。

app/views/charts/show.html.erb
<%= line_chart @graph_data %>

app/controllers/charts_conroller.rb
@graph_data = [
{"name"=>"smomo", "data"=>[['20160805', 588],['20160806', 581],['20160807', 579], ['20160809', 589], ['20160810', 596],]},
{"name"=>"smune", "data"=>[['20160805', 239],['20160806', 236],['20160807', 235], ['20160809', 240], ['20160810', 240],]},
{"name"=>"stotai", "data"=>[['20160805', 285],['20160806', 285],['20160807', 285], ['20160809', 285], ['20160810', 285]]}
]

上記のコードでなるほど、とは思いますが、特に、必ず、配列を使わないといけない、とか、
ハッシュを使わないといけない、などのこだわりはありません。一番簡単な方法がいいです。

これを、データベースにあるデータすべてを拾うやり方がわかりません。

こんなことしたり、
@graph_data = ActiveRecord::Base.connection.select_all("select keisaiday, smomo from admin_charts").to_hash
あんなことしたり、
@graph_data = {:keisaiday => '1999-04-17', :smomo => '627', :smune => '248', :stotai => '235', :hmomo => '146', :hmune => '109', :htotai => '12'}
そんなことしたり、
@graph_data = Admin::Chart.find_by_sql("SELECT keisaiday, smomo FROM admin_charts").to_hash

しましたがどうもぼくには手に負えないようです。
教えてください。よろしくお願い致します。

追記、
上記の配列のところにインスタンス変数が代入されればいいことに気付き、
@smomoary = ActiveRecord::Base.connection.select_all("select keisaiday, smomo from admin_charts")
@smuneary = ActiveRecord::Base.connection.select_all("select keisaiday, smune from admin_charts")
@stotaiary = ActiveRecord::Base.connection.select_all("select keisaiday, stotai from admin_charts")

@graph_data = [ {"name"=>"smomo", "data"=>[@smomoary]}, {"name"=>"smune", "data"=>[@smuneary]}, {"name"=>"stotai", "data"=>[@stotaiary]} ]

としました。まえよりは近付いたと思いますが、いざ、rails c で
@smomoary = ActiveRecord::Base.connection.select_all("select keisaiday, smomo from admin_charts")
を実行すると、結果の頭に、=> #<ActiveRecord::Result:0x007ffb0fd09a00 @columns=["keisaiday", "smomo"], @rows=
最後に、 @hash_rows=nil, @column_types={}>
という、余計なパラメータが入っていて結果動きません。これが出ないようにする方法をご存知の方、いらっしゃいませんか?
?これって別の質問にあげた方がいいのかな?
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

select_rows というメソッドを見つけました。
あと、{"name"=>"smomo", "data"=> [ @smomoarray ] }, としていたのを、
{"name"=>"smomo", "data"=> @smomoarray }, にしました。解決しました。

@smomoarray = ActiveRecord::Base.connection.select_rows("select keisaiday, smomo from admin_charts")
@smunearray = ActiveRecord::Base.connection.select_rows("select keisaiday, smune from admin_charts")
@stotaiarray = ActiveRecord::Base.connection.select_rows("select keisaiday, stotai from admin_charts")

@graph_data3 = [ {"name"=>"smomo", "data"=> @smomoarray }, {"name"=>"smune", "data"=> @smunearray }, {"name"=>"stotai", "data"=> @stotaiarray } ]

投稿2016/08/12 23:53

tuvalu

総合スコア136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

DBにはどういうモデル名でデータが入っているのでしょうか?

例えば、Chickenなら、@graph_data = Chicken.allで全データは取得できるとおもいます

投稿2016/08/12 08:23

dkakinoki

総合スコア25

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tuvalu

2016/08/13 01:05 編集

ありがとうございます。 モデル名は、Admin::Chart です。 @graph_data = Admin::Chart.all とやってみたところ、 一番上のチャート(水色地でこれですというやつ)のようになりました。 他にやり方はありますか?よろしくお願い致します。
tuvalu

2016/08/12 23:55

dkakinoki さん、ありがとうございました。自己解決できました。またよろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問