2011-11-27 37 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

相关问题