Как заставить ассоциации работать правильно с ChartKick? - PullRequest
0 голосов
/ 09 мая 2018

Не получается настроить ChartKick должным образом.

То, что я пытаюсь сделать, это создать график портфеля акций пользователя. portfolio - это модель, у которой есть_many PortStocks, каждая из которых имеет current_value. Каждый PortStock принадлежит Stock.

Мои модели выглядят так:

# == Schema Information
#
# Table name: portfolios
#
#  id                   :bigint(8)        not null, primary key
#  user_id              :integer
#  current_dollar_value :float            default(0.0)
#  dollar_change        :float            default(0.0)
#

class Portfolio < ApplicationRecord
  belongs_to :user
  has_many :port_stocks
end

# == Schema Information
#
# Table name: port_stocks
#
#  id             :bigint(8)        not null, primary key
#  portfolio_id   :integer
#  stock_id       :integer
#  volume         :integer
#

class PortStock < ApplicationRecord
  belongs_to :portfolio
  belongs_to :stock
end

# == Schema Information
#
# Table name: stocks
#
#  id         :bigint(8)        not null, primary key
#  ticker     :string
#  name       :string
#  price      :float
#  created_at :datetime         not null
#  updated_at :datetime         not null
#

class Stock < ApplicationRecord
  has_many :port_stocks
end

Я попробовал следующее:

<%= pie_chart @portfolio.port_stocks.group(:current_value).count %>

Но это дало круговую диаграмму:

Pie-Chart-With-No-Labels

Так что, когда я парю, он показывает мне current_value, что хорошо, но также показывает : 1, что странно. Я хочу, чтобы он показал мне имя каждого stock, к которому можно получить доступ как port_stocks.stock.name вместе с port_stocks.current_value для того port_stock, которому принадлежит stock.

Редактировать 1

Итак, я попробовал это:

<%= pie_chart @portfolio.port_stocks.joins(:stock).group("stocks.ticker").sum(:current_value) %>

Это производит это:

Pie-Chart-With-Names-Values-But-No-Formatting

Кажется, это работает, но я хотел бы иметь возможность отформатировать current_value как валюту (то есть, используя number_to_currency(current_value)).

Мысли

1 Ответ

0 голосов
/ 09 мая 2018

Я понял, как правильно делать то, что я хочу:

<%= pie_chart @portfolio.port_stocks.joins(:stock).group("stocks.ticker").sum(:current_value), prefix: "$", thousands: "," %>

, который производит это:

pie-chart-with-names-and-values

...