我有一个非常简单的请求:我有一个表,用于保存特定日期的用户权重(因此有两列:千克和一天)。我现在想要将其显示为折线图,以显示用户随时间的体重减轻(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
答案 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) %>