Проблема в том, что в выражении case
не может быть произвольных операторов. На самом деле это очень редкий случай, когда ruby ограничивает, где вы можете иметь код.
Способ, которым ERb работает, заключается в том, что он вставляет операторы вокруг вашего кода, на который направляет вывод. Вы можете увидеть это в своем журнале ошибок. В этом случае сгенерированный код выглядит примерно так:
case @status
@_out_buf.concat "\n "
when "foo"
@_out_buf.concat "\n It's a FOO!\n "
when "bar"
@_out_buf.concat "\n It's a BAR!\n "
else
@_out_buf.concat "\n It's something else...!\n "
end
Как вы видите, вторая строка - вот что вызывает проблему. Возможно, вам удастся решить эту проблему, если ваш ERb подавит символ новой строки:
<% case @status; when "foo" %>
или (хотя это может не сработать):
<% case @status -%>
<% when "foo" %>