0

使用 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

什么地方出了错?

4

3 回答 3

7

您的案例陈述顶部有一个杂散评级变量。正确的语法是:

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

这对我在 REPL 使用 pry 和 irb 有效。

于 2012-07-25T15:59:40.160 回答
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
于 2012-07-25T15:53:34.190 回答
0

如果您向 提供变量case,它将尝试将变量的值与提供给when语句的每个值进行匹配。当您在每个之后放置一个条件when时,它将首先评估该条件,然后将其与rating. 但是,评估只会产生trueorfalse并且显然您提供了一个数值给case,它总是会落入else大小写(因为rating从来没有true也不是false)。

@CodeGnome 已经发布了正确的语法,但我认为您应该知道失败的原因!

:)

于 2012-07-25T17:37:11.243 回答