неопределенный метод `collect 'для 2: Fixnum - PullRequest
0 голосов
/ 27 ноября 2011
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 ошибками" в приведенном выше коде контроллера.Затем я изменил строки

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_url и puts bc.to_url, как в http://gchartrb.rubyforge.org/.

Чего мне не хватает?

Ответы [ 2 ]

1 голос
/ 30 ноября 2011

Не зная API для Google Chart, я вижу это:

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

Параметры первой строки имеют тип String, Array, String.

Параметры следующих двух: String, Fixnum, String

Ваше сообщение об ошибке undefined method 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
1 голос
/ 28 ноября 2011

Похоже, вы загружаете 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]

Обратите внимание, что размещение данных в скобках [] означает, что теперьмассив из одного элемента.

...