2014-09-04 38 views
0

我有以下代码红宝石内嵌开始和救援不执行正确

'Performance' => { 
    'Date' => performance_values.date.strftime('%m/%d/%Y'), 
    'Ratio' => begin sprintf("%0.02f", performance_values.ratio) rescue nil end}, 
'Ratings' => { 
    'Overall' => performance_values.overall_rating, 
    '3-yr' => performance_values.3yr_rating} 

随着“比”有时可以是零,所以我想开始/营救出sprintf功能的,只是让它是零。

当此运行,performance_values.ratio是零,我得到了以下错误消息:

TypeError: can't convert nil into Float 
+0

在什么版本?如果我运行的是'irb'下的或多或少的东西,它可以正常工作,除了我将'nil'替换为'performance_values.ratio'。 – 2014-09-04 18:09:07

+0

Jruby 1.7.11红宝石1.9。它似乎在IRB下工作正常,但它似乎并没有在我的项目中工作 – 2014-09-04 18:14:28

回答

2

是线上,你不需要指定begin & end。 Rails知道你正在拯救整条生产线。

试试这个:

'Performance' => { 
    'Date' => performance_values.date.strftime('%m/%d/%Y'), 
    'Ratio' => (sprintf("%0.02f", performance_values.ratio) rescue nil)}, 
'Ratings' => { 
    'Overall' => performance_values.overall_rating, 
    '3-yr' => performance_values.3yr_rating} 
+0

没有工作......仍然遇到TypeError – 2014-09-04 18:19:52

+0

确定'sprintf'导致错误? – RAJ 2014-09-04 19:22:06

+0

()很重要! – 2014-09-04 19:31:35