2012-01-02 28 views
0

Rails 2.35/Ruby 1.87創建圖表 - 在JS語句中插入Rails變量的JSON/XML優勢?

我一直在嘗試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

有幾件事情我會在這裏有所不同。

移動你的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', 
     ... 

這都是未經測試的co德,但它應該讓你開始清理你的控制器。

+0

謝謝 - 在那裏學到了很多東西。 – Reno 2012-01-02 12:53:59