使用Rails 3,但我猜并不重要。我把它放在模板助手中。
当我为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 :(得分:7)
您在案例陈述的顶部有一个迷路评级变量。正确的语法是:
case
when rating > 3
'badge-success'
when rating < 3
'badge-important'
else
'badge-warning'
end
这对我使用pry和irb在REPL中起作用。
答案 1 :(得分: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
答案 2 :(得分:0)
如果您向case
提供变量,它将尝试将变量的值与提供给when
语句的每个值进行匹配。当您在每个when
之后添加条件时,它将首先评估条件,然后将其与rating
匹配。
但是,评估只会生成true
或false
,并且显然您提供了case
的数值,它总是会落到else
的情况下(rating
绝不是true
也不是false
)。
@CodeGnome已经发布了正确的语法,但我认为你应该知道这个失败的原因!
:)