Ruby on rails 创建图形-JSON/XML比在JS语句中插入Rails变量更具优势?

Ruby on rails 创建图形-JSON/XML比在JS语句中插入Rails变量更具优势?,ruby-on-rails,Ruby On Rails,Rails 2.35/Ruby 1.87 我一直在努力 对于Fusion图表,我总是使用构建器文件为视图呈现XML。使用jqPlot,如果我可以简单地构建一个数据字符串并将其插入到生成图形的JavaScript中,那么是否有理由呈现JSON文件等 此外,我找不到任何jqPlot Rails示例,只是编了一些东西。我很好奇我所做的是如何写得更好,或者我在这里做得是否还不错 谢谢 CONTROLLER --------------------- def provisioned_accoun

Rails 2.35/Ruby 1.87

我一直在努力

对于Fusion图表,我总是使用构建器文件为视图呈现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>

这里有几件事我会做得不同

将find_by_sql移动到DailyProvisioniedAccountsRollup上的一个方法中,该方法称为:

class DailyProvisionedAccountsRollup < ActiveRecord::Base
  ...

  def self.summary
    all.map do |record|
      [ record.day_of, record.provisioned_accounts ]
    end
  end
end
最后,在您看来,您只需使用@graph_data.to_json即可

这些都是未经测试的代码,但应该可以让您开始清理控制器

def provisioned_accounts
  @graph_data = DailyProvisionedAccountsRollup.summary
end
<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',
        ...