2013-06-18 23 views
0

失敗,我有ApplicationHelper級以下的輔助功能:助手功能可在控制檯但鑑於

def convert_to_range(n) 
    [ (0..49), (50..99)].each do |range| 
     if range.cover? (n) 
     return "#{range.min}+" 
     end 
    end 
    end 

如果我打開這個功能來安慰,它的工作原理:

convert_to_range 66 
# 50+ 

然而,當我將它稱爲視圖,它返回

[0..49, 50..99] 

這裏發生了什麼?如何解決?

+0

來自視圖的數字是否相同? –

+1

如果'n'不在範圍內,你想返回什麼? –

回答

1

您從視圖中傳遞的數字必須超出您傳入的範圍。然後,默認行爲將返回方法的最後一行,但由於唯一的語句是for,它會返回那些評估爲,這是您的兩個Range對象的數組。

irb(main):013:0> convert_to_range 45 
=> "0+" 
irb(main):016:0> convert_to_range 99 
=> "50+" 
irb(main):014:0> convert_to_range 100 
=> [0..49, 50..99] 

如果加一個return語句來表示這是一個錯誤,你會得到你的,而不是數組:

def convert_to_range(n) 
    [(0..49), (50..99)].each do |range| 
     if range.cover? (n) 
     return "#{range.min}+" 
     end 
    end 

    false 
end 

irb(main):025:0> convert_to_range 999 
=> false 

,或者你可以任意引發異常。

+0

非常感謝,獵人 – AdamNYC