在Rails中将数据库中的数据可视化为折线图

时间:2016-06-02 20:26:08

标签: ruby-on-rails chartkick

我有一个非常简单的请求:我有一个表,用于保存特定日期的用户权重(因此有两列:千克和一天)。我现在想要将其显示为折线图,以显示用户随时间的体重减轻(x轴=天,y轴=千克)。

我安装了Chartkick,它渲染了一个图表,但我真的不知道如何将这些值输入折线图。

Chartkick是否是此目的的正确选择?如果是的话,我的代码应该如何?

weight.rb

class Weight < ActiveRecord::Base
  belongs_to :user
  validates :day, uniqueness: { scope: :user_id,
    message: "You already stored a weight today. Go back and edit if necessary." }
end

user.rb

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  after_create :create_profile

  has_one :profile, dependent: :destroy
  has_many :weights, dependent: :destroy
end

2 个答案:

答案 0 :(得分:1)

Chartkick将完全按照你的意愿行事。

对于特定图表。

<%= line_chart User.weight_measurements.group_by(day).average(:weight)

在这种情况下,我假设你的一天不是约会对象。否则,您可能希望由同一作者使用groupdate

<%= line_chart User.weight_measurements.group_by_day(day).average(:weight)

可能有一种更清洁的方法,但这应该有效

答案 1 :(得分:0)

找到了解决方案。

Chartkicks文档说:

  

时间可以是时间,时间戳或字符串(解析字符串)

<%= line_chart({20.day.ago => 5, 1368174456 => 4, "2013-05-07 00:00:00 UTC" => 7}) %>

所以我所做的就是以建议的格式从Weights表中创建一个哈希...

<强> weights_controller.rb

@result = {}
    Weight.where(:user_id => current_user.id).each do |weight|
      @result[weight.day] = weight.kilograms
    end

...并在折线图中使用它:

<%= line_chart(@result, min: nil) %>