2015-09-08 201 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}