2011-11-27 74 views
0
def function1 
    @user=User.find(params[:user_id]) 
    @participants=Participant.find_all_by_user_id(params[:user_id]) 
    bar_1_data = @user.get_total 
    bar_2_data = params[:count] 
    color_1 = 'c53711' 
    color_2 = '0000ff' 
    min=0 
    max=100 
    puts(bar_1_data)  # prints 2 on console 
    puts(bar_2_data)  # prints 3 on console 
    puts (bar_1_data).is_a? Integer # prints true 
    puts (bar_2_data).is_a? Integer # prints false 
    bc=GoogleChart::BarChart.new("300x80", " ", :horizontal, false) 
    bc.data " ", [100], 'ffffff' 
    bc.data "Bar1", bar_1_data, color_1 
    bc.data "Bar2", bar_2_data.to_i, color_2 
    bc.axis :x, :range => [min,max] 
    bc.show_legend = true 
    bc.stacked = false 
    bc.data_encoding = :extended 
    @bc= bc.to_url 
    end 
    end 

我得到參數錯誤「比較字符串與100失敗」int上述控制器代碼。然後,我改變了線未定義的方法`收集'爲2:Fixnum

bc.data "Bar1", bar_1_data, color_1 
bc.data "Bar2", bar_2_data, color_2 

bc.data "Bar1", bar_1_data.to_i, color_1 
bc.data "Bar2", bar_2_data.to_i, color_2 

這給了我undefined method collect for 2:Fixnum在行@bc= bc.to_url。 在控制檯上它提供了以下錯誤:

NoMethodError (undefined method `collect' for 2:Fixnum): 
    gchartrb (0.8) lib/google_chart/base.rb:499:in `extended_encode' 
    gchartrb (0.8) lib/google_chart/base.rb:461:in `encode_data' 
    gchartrb (0.8) lib/google_chart/bar_chart.rb:69:in `process_data' 
    gchartrb (0.8) lib/google_chart/bar_chart.rb:68:in `collect' 
    gchartrb (0.8) lib/google_chart/bar_chart.rb:68:in `process_data' 
    gchartrb (0.8) lib/google_chart/base.rb:440:in `add_data' 
    gchartrb (0.8) lib/google_chart/base.rb:305:in `prepare_params' 
    gchartrb (0.8) lib/google_chart/base.rb:77:in `to_url' 
    app/controllers/assess_controller.rb:139:in `function1' 
    gchartrb (0.8) lib/google_chart/bar_chart.rb:22:in `initialize' 
    app/controllers/assess_controller.rb:131:in `new' 
    app/controllers/assess_controller.rb:131:in `function1' 
    /Library/Ruby/Gems/1.8/gems/hoptoad_notifier-2.4.11/lib/hoptoad_notifier/rack.rb:27:in `call' 
    /Library/Ruby/Gems/1.8/gems/hoptoad_notifier-2.4.11/lib/hoptoad_notifier/user_informer.rb:12:in `call' 

Rendering rescues/layout (internal_server_error) 

試圖在視圖打印bc<p><img src="<%= puts (@bc) %>" ></p>,它不打印任何東西,但是當我在控制器打印bc它打印 #<GoogleChart::BarChart:0x103be9660>

我是不是正確地發送到視圖?我已經嘗試@bc=bc.to_urlputs bc.to_url,如http://gchartrb.rubyforge.org/

我錯過了什麼?

+1

你嘗試過'bc.data「Bar1」,bar_1_data.map(&:to_i),color_1'嗎? – Jan

+0

給出'未定義的方法'映射'爲2:Fixnum' – Ava

回答

1

如果不知道的谷歌圖表API,我看到:

bc.data " ", [100], 'ffffff' 
bc.data "Bar1", bar_1_data, color_1 
bc.data "Bar2", bar_2_data.to_i, color_2 

第一行的參數是字符串類型,數組,字符串的。

未來兩年的參數是字符串,長整數,字符串

你的錯誤信息是undefined method collect for 2:Fixnum ...所以也許你應該改變對長整數數組。

bc.data " ", [100], 'ffffff' 
bc.data "Bar1", [bar_1_data], color_1 
bc.data "Bar2", [bar_2_data.to_i], color_2 
+0

作爲我自己的答案的附錄,在'bar_1_data'可以是單個值或數組的情況下,您可以使用'Array(bar_1_data)' – DGM

1

看起來你正在將bar_1_data和bar_2_data加載到數組中。因此錯誤undefined method to_i for Array

相反的:

bar_1_data = [@user.get_total] 
bar_2_data = [params[:count]] 

試試看

bar_1_data = @user.get_total 
bar_2_data = params[:count] 

注意,把裏面[]括號數據意味着它現在一個項目的數組。

+0

我刪除了括號,但現在它給我'未定義methodcollect'爲2:Fixnum'錯誤在'@ bc = bc.to_url' – Ava

+0

嗯,這是回答你問的問題。您試圖將數組與一個整數進行比較,這不起作用,並且您也無法將數組轉換爲整數。現在,您在調用此GoogleCharts圖書館時遇到問題,並且我認爲您需要提出一個關於該圖書館正確使用情況的新問題。我不知道'to_url'方法需要什麼才能工作,但顯然它期望一個可枚舉的地方獲得一個整數,所以你必須解決這個問題。 – Andrew

相關問題