javascript - Rails 数据拉入 Highcharts
问题描述
我的 Ruby on Rails 应用程序中有一个散点图。我正在为公司拥有的每个供应商创建一个点。样本公司只有 4,000 多家供应商。我正在提取每个供应商的名称以用作工具提示信息。问题是数据库查询需要 16 秒以上。当我单击该点时,有没有办法提取数据?目前,所有数据都被拉入图表并在单击某个点时可用。在控制器中,我正在创建一个包含 x、y 和供应商 ID 项的数组:
SupplierScore.where(id: supplier_ids, company_specific: false)
.group(:x, :y, :supplier_id)
.order('count_id asc')
.count(:id)
同样在控制器中,我使用供应商 ID 来拉入所有供应商(这发生在一个each
块中):
data += "{x: #{array[0]}, y: #{array[1]}, marker: {radius: #{radius} }, supplier_name: `#{@suppliers.find_by(id: array[2]).name}` },"
然后,在 highcharts javascript 中,单击某个点时显示供应商名称:
tooltip: {
enabled: false,
// show supplier name on tooltip
formatter: function() {
return this.point.supplier_name
}
}
我的代码也设置为仅存储供应商 ID 而不是供应商名称(目前已注释掉):
data += "{x: #{array[0]}, y: #{array[1]}, marker: {radius: #{radius} }, supplier_id: #{array[2]} },"
我想在使用存储在数组中的供应商 ID 单击点时检索供应商名称,而不是在创建数组时检索所有供应商名称。我希望这将使图表加载得更快。
编辑:
这是完整的控制器操作:
def get_color_points(scores)
total_count = scores.values.inject(0) { |sum, x| sum + x }
data_1 = '['
data_2 = '['
scores.each do |array, count|
radius = count / total_count.to_f * 300
radius = radius < 5 ? 5 : radius
radius = 5
if array[1] <= 49
# data_1 += "{x: #{array[0]}, y: #{array[1]}, marker: {radius: #{radius} }, supplier_id: #{array[2]} },"
data_1 += "{x: #{array[0]}, y: #{array[1]}, marker: {radius: #{radius} }, supplier_name: `#{@suppliers.find_by(id: array[2]).name}` },"
else
# data_2 += "{x: #{array[0]}, y: #{array[1]}, marker: {radius: #{radius} }, supplier_id: #{array[2]} },"
data_2 += "{x: #{array[0]}, y: #{array[1]}, marker: {radius: #{radius} }, supplier_name: `#{@suppliers.find_by(id: array[2]).name}` },"
end
end
data_1 = orange_data[0, orange_data.length - 1] + ']'
data_2 = turquoise_data[0, turquoise_data.length - 1] + ']'
[data_1, data_2]
end
生成的数组如下所示(但包含 4,000 多个项目):
[
{x: 44, y: 15, marker: {radius: 5 }, supplier_id: 1792 },
{x: 47, y: 14, marker: {radius: 5 }, supplier_id: 1816 },
{x: 91, y: 7, marker: {radius: 5 }, supplier_id: 3864 },
{x: 82, y: 17, marker: {radius: 5 }, supplier_id: 1824 },
{x: 78, y: 1, marker: {radius: 5 }, supplier_id: 1888 },
{x: 30, y: 7, marker: {radius: 5 }, supplier_id: 3952 },
{x: 77, y: 10, marker: {radius: 5 }, supplier_id: 1936 }
]
解决方案
推荐阅读
- php - CSS 在 wordpress 网站中不起作用;在functions.php中调用未定义的函数get_template_uri()
- material-ui - 对于 React 前端应用程序,Bootstrap 与 Material-UI
- android - 如何更改收到通知的方形图标?
- java - 创建对象数组但找不到符号
- python - 使用 python 在 sftp 服务器中移动文件引发异常
- scala - 如何使用 SparkStreaming 从 Kafka 获取 JSON 数据
- ios - 从 NotificationCenter 删除/取消待处理的本地通知
- java - 如何使用整数和 if...else 获取特定字符
- javascript - 如何在 SVG 中进行变形
- python - 如何从大量数字中生成有偏随机数