Визуализация данных из базы данных в виде линейной диаграммы в Rails

У меня очень простой запрос: у меня есть таблица, в которой хранится вес пользователей за определенный день (то есть два столбца: килограммы и день). Теперь я хочу показать это в виде линейной диаграммы, чтобы показать потерю веса пользователя с течением времени (ось x = день, ось y = килограммы).

Я установил Chartkick, и он отображает диаграмму, но я действительно не знаю, как получить эти значения на линейной диаграмме.

Подходит ли Chartkick для этой цели? И если да, то как должен выглядеть мой код?

вес.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

person Oliver    schedule 02.06.2016    source источник
comment
Как называется твой стол? И как вы его подключаете к пользовательской таблице?   -  person Carpela    schedule 03.06.2016
comment
Я обновил эту информацию в своем посте выше. Моя таблица называется Weights.   -  person Oliver    schedule 03.06.2016


Ответы (2)


Chartkick сделает именно то, что вы хотите.

Для конкретного графика.

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

В этом случае я предполагаю, что ваш день не свидание. В противном случае вы можете использовать groupdate того же автора.

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

Вероятно, есть более чистый способ сделать это, но это должно сработать.

person Carpela    schedule 05.06.2016

Нашел решение этого.

Документация 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) %>
person Oliver    schedule 04.06.2016