[]:Array的未定义方法`keys'

时间:2014-03-24 03:30:44

标签: ruby-on-rails ruby-on-rails-3.2

我收到了一个未定义的方法错误:

[“71”,“74”,“340”,“75”]的未定义方法`keys':Array

我正在使用Gruff with Prawn来插入图像图,我正确显示条形图,但标签调用上发生了未定义的错误。

使用对虾(0.15.0)和粗暴(0.5.1)

def initialize(result)
 super()
 @result = result
 show_graph
end

def show_graph
lint = @result.map {|v| v.lint/227 } 
g = Gruff::Bar.new('540x200')
g.data(:lint, lint, '#00463f')
@result.each_with_index do |v, i|
g.labels = {i => v.variety.variety_name}
end
g.y_axis_label = 'Yield (bales/ha)'
g.marker_font_size = 16
g.marker_count = 5
g.theme = {:marker_color => '#333333', :font_color => '#333333', :background_colors => %w(#ffffff #ffffff)}
g.minimum_value = 0
g.hide_legend = true

g.write("#{Rails.root}/app/assets/images/chart.png")

image "#{Rails.root}/app/assets/images/chart.png"

结束

控制器

@result = Result.where('trial_id' => params[:trial_id]).order('lint DESC')

1 个答案:

答案 0 :(得分:0)

@result.map返回一个数组。 Ruby Hash的确类似于数学" map",但Ruby的常规.map方法的另一个名称是.collect,因为它是g.labels一切都做到了。数组输入,数组输出。

我不知道@result.inject({}){|v, h| h.merge v.variety_id => v.variety }需要什么,但您可以使用.merge获取哈希值。将参数更改为{{1}}以满足您的需求。