Ruby массив, JavaScript и JSON выпуск - PullRequest
0 голосов
/ 02 апреля 2010

Я не могу получить плагин highcharts для рендеринга графика в приложении rails: http://github.com/loudpixel/highcharts-rails

Я полагаю, что это как-то связано с запросами sql к базе данных, размещенной в массиве ruby, который JavaScript не может интерпретировать. Вот что у меня есть:

def panels
pass = Student.find_by_sql('SELECT COUNT(*) FROM students WHERE student_state = 1')
fail = Student.find_by_sql('SELECT COUNT(*) FROM students WHERE student_state = 2')

student_data = [
  {:name => 'Pass', :y => pass}, 
  {:name => 'Fail', :y => fail}
]
pie_label_formatter = '
  function() {
    if (this.y > 15) return this.point.name;
  }'

pie_tooltip_formatter = '
  function() {
    return "<strong>" + this.point.name + "</strong>: " + this.y + " %";
  }'

@pie_chart = 
    Highchart.pie({
    :chart => {
          :renderTo => "pie-chart-container",
          :margin => [50, 30, 0, 30]
        },
        :plotOptions => {
          :pie => {
            :dataLabels => {
              :formatter => pie_label_formatter, 
              :style => {
                :textShadow => '#000000 1px 1px 2px'
              }
            }
          }
        },
      :series => [
            {
                :type => 'pie',
                :data => student_data
            }
        ],
        :subtitle => {
          :text => 'April 2010'
        },
        :title => {
          :text => 'Student Status Chart'
        },
        :tooltip => {
          :formatter => pie_tooltip_formatter
        },
    })

Обратите внимание, если я поставлю это: : data => student_data.to_json На самом деле он возвращает строку json моего запроса в виде текста в браузере. Кроме того, если я жестко закодирую значения (например: y => 1), он будет правильно отображать диаграмму. Однако любой запрос к базе данных не будет правильно отображать диаграмму. Так что я не уверен точно, в чем проблема. Какие-либо предложения? Благодарю.

1 Ответ

1 голос
/ 02 апреля 2010

Возможно, вы захотите использовать count вместо find_by_sql:

pass = Student.count(:conditions => ['student_state = ?', 1])
fail = Student.count(:conditions => ['student_state = ?', 2])

find_by_sql вернет вам массив Student объектов. count вернет вам количество строк, соответствующих условиям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...