Ruby on rails 未定义的方法“collect';对于2:Fixnum

Ruby on rails 未定义的方法“collect';对于2:Fixnum,ruby-on-rails,ruby,undefined,google-visualization,Ruby On Rails,Ruby,Undefined,Google Visualization,我在上面的控制器代码中得到参数错误“字符串与100的比较失败”。然后我换了台词 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'

我在上面的控制器代码中得到参数错误“字符串与100的比较失败”。然后我换了台词

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

这给了我在第
@bc=bc.to_url
行为2:Fixnum收集未定义的方法。 在控制台上,它给出以下错误:

bc.data "Bar1", bar_1_data.to_i, color_1
bc.data "Bar2", bar_2_data.to_i, color_2
尝试在视图中打印
bc
,但当我在控制器中打印
bc
时,它不会打印任何内容
#

我没有正确地将其发送到视图吗?我已经尝试了
@bc=bc.to_url
将bc.to_url
放入视图中


我缺少什么?

看起来您正在将bar_1_数据和bar_2_数据加载到数组中。因此,错误
未定义数组的方法

而不是:

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)
试试看

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

请注意,将数据放在括号内意味着它现在是一个由一个项目组成的数组。

如果不知道google charts的api,我会看到:

bar_1_data = @user.get_total
bar_2_data = params[:count]
第一行的参数类型为String、Array、String

接下来两个的参数是String、Fixnum、String

您的错误消息是
未定义的方法collect for 2:Fixnum
…因此您可能应该将Fixnum更改为Array

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

您是否尝试过
bc.data“Bar1”,bar_1_data.map(&:to_i),color_1
?为2:Fixnum'提供
未定义的方法
map`我删除了括号,但现在为2:Fixnum提供了
未定义的方法collect',第
@bc=bc行出现错误。_url
这就是您所问问题的答案。您试图将数组与整数进行比较,这不起作用,而且您还可以无法将数组转换为整数。现在,您正在调用的GoogleCharts库出现问题,我认为您需要提出一个新问题,重点是该库的正确使用。我不知道
to_url
方法需要什么才能工作,但很明显,它在获得inte时需要一个枚举作为我自己答案的补充,如果
bar\u 1\u data
可以是单个值或数组,您可以使用
array(bar\u 1\u data)
bc.data " ", [100], 'ffffff'
bc.data "Bar1", bar_1_data, color_1
bc.data "Bar2", bar_2_data.to_i, color_2
bc.data " ", [100], 'ffffff'
bc.data "Bar1", [bar_1_data], color_1
bc.data "Bar2", [bar_2_data.to_i], color_2