【问题标题】:Getting data from Postgres in JSON format in ROR into a Highcharts javascript以 ROR 中的 JSON 格式从 Postgres 获取数据到 Highcharts javascript
【发布时间】:2014-06-21 22:40:54
【问题描述】:

我正在学习 ROR(目前 5 个月以上),并且正在尝试将 Postgres 数据库中的数据导入 Highcharts。 Postgres 表包含 :id、:name 和 :pc1 的列——这是一年的百分比变化——(以及其他)。数据库中有五个时间序列[:id]。

这是数据库架构:

create_table "series", force: true do |t|
    t.string   "acronym"
    t.string   "name"
    t.string   "current"
    t.string   "previous"
    t.string   "pc1"
    t.datetime "created_at"
    t.datetime "updated_at"
end

这是系列控制器的一部分:

class SeriesController < ApplicationController
before_action :set_series, only: [:show, :edit, :update, :destroy]

# GET /series
# GET /series.json
def index
  @series = Series.all
end

def percent
  @series.each do |series|
    series.name
    series.pc1
  end
  render :json  
end

我正在定义一种方法 - “百分比” - 因为我想创建几个不同的图表,例如,一个用于同比百分比变化(这个)以及以前与当前的变化。

这是 Highcharts 脚本的视图:

或多或少遵循 Highcharts 的说明(此处为:http://www.highcharts.com/docs/working-with-data/preprocessing-data-from-a-database),我从 Highcharts 函数中提取了“数据”请求。原始的 Highcharts 演示代码 - 使用嵌入式“硬编码”数组 - 在这里:http://www.highcharts.com/docs/getting-started/your-first-chart 如果我在调用函数之前将其声明为变量,我假设我应该删除该系列。我忽略了示例中的 php,因为我应该从控制器以 json 格式呈现系列。

<div>
<script>
  var chart = new Highcharts.Chart({
    chart: {
       renderTo: 'container'
    },
    series: [{

// I pulled local host out of here because Stackoverflow doesn't like it

      var url =  "";
      $.getJSON(url,  function(resp) {
        options.series[0].name = name;
        options.series[0].pc1 = pc1;
        var chart = new Highcharts.Chart(options);
        });

      pointStart: 0,
      pointInterval
    }]
});

  $(function () { 

      $('#container').highcharts({
          chart: {
              type: 'bar'
          },
          title: {
              text: 'Fruit Consumption'
          },
          xAxis: {
              categories: ['Apples', 'Bananas', 'Oranges']
          },
          yAxis: {
              title: {
                  text: 'Fruit eaten'
              }
          },          
      });

  });
  </script>
</div>

这是模型:

class Series < ActiveRecord::Base
    has_many :series
end

我认为我有多个问题:

  1. 我是否在控制器中正确渲染了 json?
  2. 我应该调用脚本中的 url 还是文件(因为我使用的是 localhost 服务器)?
  3. 我怀疑还有其他方法,例如,百分比方法是否应该在控制器的 before 操作中?

控制台中的错误是这一行:var url = "http://localhost:3000/series";我尝试了多种变体,包括 /series 和文件路径。

我的环境已设置好(使用带有 Mavericks 的 Apple Mac)。我使用终端应用程序运行 rails 服务器、Postgres 在单独的选项卡中运行、Sublime Text 版本 2 和 Chrome。

【问题讨论】:

    标签: javascript ruby-on-rails json postgresql highcharts


    【解决方案1】:

    1.我在控制器中正确渲染 json 吗?

    我不这么认为。我还会发送一个状态,你需要告诉它是什么 json。 所以我想:

    def percent
      @series.each do |series|
        series.name
        series.pc1
      end
      render status: 200, json: @series.as_json  
    end
    

    2.我应该在脚本或文件中调用 url(因为我使用的是 localhost 服务器)?

    一个网址,总是一个网址。您将无法访问文件。而且您的网址似乎正确。

    3.我怀疑还有其他的,例如,百分比方法是否应该在控制器的 before 操作中?

    这取决于你在做什么。如果你想通过调用/seriesroute来响应percent方法生成的json,你需要在index方法中调用percent。如果您想显式调用/percent,只需将其添加到路由中即可。顺便说一句,您确实为此更改了路由文件,对吗? 您至少应该有一个可用于系列控制器的 get,或者如果您想要完整的 CRUD,则应该有一个资源。 另外,我认为您应该遵守将模型名称以单数形式命名的约定,而您的 has_many: 系列对我来说没有意义。你想在那里实现什么? 如果一个系列 has_may 系列,那么您应该在模型中有一个serie_id 并且也是一个所属。

    希望这能有所帮助。

    【讨论】:

    • 阿方索,感谢您的帮助! 1. 修改渲染正确格式化数据并将其发送到 series#index 动作。 (我的路线是正确的。)输出是一个数组。 2. 要从 Postgres 数据库中检索数据,将其交给 Highcharts,然后渲染图表,需要做的是:
    • 1.修改渲染正确地格式化数据并将其发送到 series#index 操作。 (我的路线是正确的。)输出是一个数组。 A. 控制器不应该有渲染调用;相反 - 在我的情况下 - 只是 @series = Series.all; B. Highcharts 的 json 预处理需要放在 app/assets/(controller name)/javascript-file 中。 C. Highcharts html 进入您的视图。您还需要添加 Highcharts 的 javascript 文件(或将其放在部分中)。我的错误是假设我需要一个控制器操作来检索数据。
    猜你喜欢
    • 1970-01-01
    • 2014-08-19
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 2013-02-02
    相关资源
    最近更新 更多