2012-07-25 38 views
0

使用Rails 3,但我猜並不重要。我把它放在模板幫手中。爲什麼此案例陳述僅評估else子句?

它永遠屬於最後一種情況badge-warning當我的任何值,我把對rating,如rating_badge(4)

def rating_badge(rating) 
    case rating 
    when rating > 3 
     'badge-success' 
    when rating < 3 
     'badge-important' 
    else 
     'badge-warning' 
    end 
    end 

出了什麼問題?

+0

是* rating * a Fixnum? – 2012-07-25 15:31:36

+0

請完整發布所有**相關的**錯誤消息,以及您正在測試的任何樣本,以改善您的問題。 – 2012-07-25 15:32:17

+0

沒有錯誤消息。評級是一個整數。 – Victor 2012-07-25 15:33:10

回答

7

你在您的病例陳述的頂部有一個流浪的評分變量。正確的語法是:

case 
when rating > 3 
    'badge-success' 
when rating < 3 
    'badge-important' 
else 
    'badge-warning' 
end 

這適用於我在REPL使用pry和irb。

1

我不知道case語法,我想你必須包含這個詞then ...

when something then result1 
when something_else then result2 
... 

但是你可以使用if達到同樣的效果:

def rating_badge(rating) 
    if rating > 3 
    'badge-success' 
    elsif rating < 3 
    'badge-important' 
    else 
    'badge-warning' 
    end 
end 
+0

是的,我可以用if-else來實現,但是想知道什麼是錯的。謝謝。 – Victor 2012-07-25 16:17:48

0

如果您提供的變量爲case,它會嘗試將變量的值與提供給when語句的每個值進行匹配。當您在每個when之後放置一個條件時,它會首先評估條件,然後將其與rating進行匹配。 但是,評價只會產生truefalse並且顯然你提供一個數值,以case,它將始終落在else情況下(與rating是從未true也不false)。

@CodeGnome已經發布了正確的語法,但我認爲您應該知道導致此失敗的原因!

:)