Создание графиков. Преимущество JSON / XML по сравнению с простой вставкой переменной Rails в оператор JS? - PullRequest
0 голосов
/ 02 января 2012

Рельсы 2,35 / Рубин 1,87

Я пытался jqplot .

В Fusion Charts я всегда использовал файлы компоновщика, которые отображали XML для представления. С jqPlot, если я могу просто построить строку данных и вставить ее в JavaScript, который генерирует график, есть ли причина для рендеринга файлов JSON (и т. Д.)?

Кроме того, я не смог найти примеры jqPlot Rails и просто что-то придумал. Мне было любопытно, как то, что я сделал, могло быть написано лучше (или если бы я сделал хорошо здесь).

Спасибо!

  CONTROLLER
  ---------------------
 def provisioned_accounts
    sql = %Q{
          SELECT day_of, provisioned_accounts from daily_provisioned_accounts_rollup
          }
    graph_data = DailyProvisionedAccountsRollup.find_by_sql(sql)

    @graph_data = ''
    x = 0
    graph_data.each do |g|
      x += 1
      if x == 1
        @graph_data += "['" + g.day_of.to_s + "', "  + g.provisioned_accounts.to_s + "]"
      else
        @graph_data += ", ['" + g.day_of.to_s + "', "  + g.provisioned_accounts.to_s + "]"
      end
    end
  end

  VIEW
  ---------
  <div id="chart1" style="height:300px; width:800px;"></div>

  <script type="text/javascript">
    $(document).ready(function(){
      var line1=[<%= @graph_data %>];
      var plot1 = $.jqplot('chart1', [line1], {
          title:'Provisioned Accounts',
          axes:{
            xaxis:{
              renderer:$.jqplot.DateAxisRenderer,
              tickOptions:{
                formatString:'%b&nbsp;%#d'
              }
            },
            yaxis:{
              tickOptions:{
                formatString:'%.0f'
                }
            }
          }
      });
    });
</script>

1 Ответ

1 голос
/ 02 января 2012

Здесь есть несколько вещей, которые я бы сделал по-другому.

Переместите ваш find_by_sql в метод на DailyProvisionedAccountsRollup, который называется примерно так:

class DailyProvisionedAccountsRollup < ActiveRecord::Base
  ...

  def self.summary
    all.map do |record|
      [ record.day_of, record.provisioned_accounts ]
    end
  end
end

Затем в вашем контроллереВы можете просто сделать это:

def provisioned_accounts
  @graph_data = DailyProvisionedAccountsRollup.summary
end

Наконец, по вашему мнению, вы просто используете @graph_data.to_json

<div id="chart1" style="height:300px; width:800px;"></div>

<script type="text/javascript">
  $(document).ready(function(){
    var line1=<%= @graph_data.to_json %>
    var plot1 = $.jqplot('chart1', [line1], {
        title:'Provisioned Accounts',
        ...

Это весь непроверенный код, но он должен помочь вам начать очистку ваших контроллеров..

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