Диаграммы на рельсах 3 с использованием высоких карт - PullRequest
3 голосов
/ 13 мая 2011

Я следую главе 223 (диаграммы) Railscasts и пытался реализовать стиль "пончик" для приложения, используя библиотеку Highcharts . Теперь я знаю, что это всего лишь один «круговой» ряд внутри другого, и каждый из них имеет свой собственный источник данных.

Хотя, пытаясь настроить примеры так, как мне хотелось, я просто не мог получить желаемый результат. Мне было интересно, как правильно передавать данные в параметр «данные» диаграммы?.

Итак, я скопировал из интернета следующий код (только для тестирования):

      series: [       
      {
        type: 'pie',
        name: '2008',
        size: '45%',
        innerSize: '20%',
        data: [
            { name: 'Firefox', y: 45.0, color: '#4572A7' },
            { name: 'IE', y: 26.8, color: '#AA4643' },
            { name: 'Chrome', y: 12.8, color: '#89A54E' },
            { name: 'Safari', y: 8.5, color: '#80699B' },
            { name: 'Opera', y: 6.2, color: '#3D96AE' },
            { name: 'Mozilla', y: 0.2, color: '#DB843D' }      
           ]             
       }
      ]

Другой способ передачи данных:

series: [       
       {
        type: 'pie',
        name: '2008',
        size: '45%',
        innerSize: '20%',
 data: [
        ['IE', 46.6],
        ['Chrome',  3.1], 
        ['Safari',  2.7], 
        ['Opera',  2.3],
        ['Mozilla', 0.4]           
     ]
   }]

Как видите, данные, которые я использую, являются статическими. Что, если я хочу использовать информацию из моей базы данных? . Итак, так как у меня есть пара моделей:

class Frame < ActiveRecord::Base       class FrString < ActiveRecord::Base
  attr_accessible :name, :total           attr_accessible :frame_id,:name,:total

   has_many :fr_strings                   belongs_to :frame
end                                    end

Хотя создание массива массивов для последующего использования его в качестве источника данных для моих диаграмм было бы хорошей идеей ... очевидно, не очень хорошим.

<% _data=[] %>
<%Frame.all.each do |frame|%>
   <% _data  << [frame.name,frame.fr_strings.sum(:total)]%>
<%end%>

Пирог не готовится. Так что я был бы признателен за любую помощь в этом вопросе

Редактировать (вывод Javascript)

Когда я передаю параметр «data» как:

  data: [                
         <%_data.each do |d|%>
            <%=d%>,
          <%end%>                   
     ]

Это дает мне:

 <!DOCTYPE html> 
  <html> 
    <head> 
     <title>Charts</title> 
      <link href="/stylesheets/application.css?1305016385" media="screen" rel="stylesheet" type="text/css" /> 
     <script src="/javascripts/application.js?1304963001" type="text/javascript">       </script> 
  <script src="/javascripts/jquery-1.4.2.min.js?1305020819" type="text/javascript"></script> 
  <script src="/javascripts/rails.js?1305020831" type="text/javascript"></script> 
  <script src="/javascripts/highcharts.js?1305029094" type="text/javascript"></script> 

  <meta name="csrf-param" content="authenticity_token"/> 
  <meta name="csrf-token" content="G4k7DrZNfIcJt4Dlbz7JzNViSjQ+OGPUAVY4rW+XAxY="/> 
  </head> 
<body> 
       <script type="text/javascript" charset='utf-8'> 
           $(function(){
         new Highcharts.Chart({         
           chart: {
          renderTo: 'frames_chart',
          margin: [50, 0, 0, 0],
          plotBackgroundColor: 'none',
          plotBorderWidth: 0,
          plotShadow: false            
       },
       title: {
          text: 'CHART TITLE'
       },
        subtitle: {
          text: 'Inner circle: 2008, outer circle: 2010'
       },
       tooltip: {
          formatter: function() {
             return '<b>'+ this.series.name +'</b><br/>'+ 
                this.point.name +': '+ this.y +' %';
          }
       },
        series: [      
        {
          type: 'pie',
          name: '2008',
          size: '60%',
          innerSize: '10%',
          data: [
               [&quot;Car&quot;, 93.0]
               [&quot;House&quot;, 91.0]
          ],
          dataLabels: {
            enabled: false
             }
          },           
        ]
     });
  });
</script> 

     <div id="frames_chart" style="width:560px; height:300px"></div> 

 </body> 
</html>

Может ли этот синтаксис "&quot; **** &quot;" быть причиной того, что все тут запуталось? Я перепроверил массив _data и вот как он заполняется. Может проблема в том, как я получаю данные?

1 Ответ

3 голосов
/ 26 мая 2011

Я думаю, что вы получаете в html просто неверный код JavaScript и не интерпретируется. Попробуйте следующее:

 data: [                
     <%_data.each do |d|%>
        <%=raw d %>,
      <%end%>                   
 ]

Директива raw должна удалить HTML-код & quot, который вы видите для кавычек.

Если это не помогает, можете ли вы проверить, есть ли у вас какие-либо ошибки JavaScript, используя расширение браузера? Для Google Chrome вы можете перейти в Инструменты -> Инструменты разработчика и посмотреть, есть ли у вас какие-либо ошибки js на вашей странице.

Редактировать: Вам также может понадобиться пометить 'd' как html_safe, например:

 data: [                
     <%_data.each do |d|%>
        <%=raw d.html_safe %>,
      <%end%>                   
 ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...