2015-09-08 193 views
1

我有一个YAML文件:红宝石哈希选择

0: 
    price: 0 
    storage: 8 
    instances: 1 
    hours: 2 
1: 
    price: 9.99 
    storage: 8 
    instances: 2 
    hours: 25 

我试图选择所有付费计划,只有这样:

@plans = YAML.load_file("#{Rails.root}/config/plans.yml") 
@paid_plans = @plans.select {|plan| plan[1]['price'] > 0} 

但它说

no implicit conversion of string into integer 

什么我做错了吗?

回答

2

YAML值只是字符串,因此plan[1]['price']返回'9.99',所以我认为在进行比较之前,您需要将该值转换为数值类型。例如plan[1]['price'].to_f > 0

+0

当我试图重现此,我得到:'计划[1] [ '价格']类 => Float'使用Ruby 2.0.0与2.0.6斗志,这因为我认为我会得到一个字符串,所以让我感到困惑不已。 – SirDarius

+0

似乎没有为我工作;错误依然存在。我认为问题在于散列部分,而不是比较。 – cjm2671

1

0:1:等可以是字符串。无论是使用YAML lists或搜索字符串键:

plan['1']['price'] 

另外请注意,您的选择并没有太大的意义,无论如何,因为它会经常检查N1计划。

+0

雅,甚至将它命名为0:和1:接近不好。我们只是在铁轨上感到困扰。 –

+0

尝试过。同样的错误。 – cjm2671

+0

@ cjm2671,你是什么意思? 'select'外部的plan ['1'] ['price']'失败? – ndn

0

它的字符串不是float/int /数字。你需要施放它。为什么不使用I18n发动机?

2

该问题与select的结构有关;它需要一个键/值对。它应该是:

@plans.select {|k,v| v['price']>0}