On May 10, 2005, at 2:17 AM, Farrel Lifson wrote: > Hi Rubyists, > > While writing a template with ERB I found that case statements do not > seem to work: > > irb(main):001:0> template =<<EOS > irb(main):002:0" <% case number %> > irb(main):003:0" <% when 1 %> > irb(main):004:0" <%= "one" %> > irb(main):005:0" <% when 2 %> > irb(main):006:0" <%= "two" %> > irb(main):007:0" <% else %> > irb(main):008:0" <% "more than two" %> > irb(main):009:0" <% end %> > irb(main):010:0" EOS > => "<% case number %>\n<% when 1 %>\n<%= \"one\" %>\n<% when 2 %>\n<%= > \"two\" % >> \n<% else %>\n<% \"more than two\" %>\n<% end %>\n" > irb(main):011:0> require 'erb' > => true > irb(main):012:0> erbRunner = ERB.new(template) > => #<ERB:0x2c497f8 @filename=nil, @src="_erbout = ''; case number ; > _erbout.con > cat \"\\n\"\n when 1 ; _erbout.concat \"\\n\"\n_erbout.concat(( > \"one\" ).to_s); > _erbout.concat \"\\n\"\n when 2 ; _erbout.concat > \"\\n\"\n_erbout.concat(( \"tw > o\" ).to_s); _erbout.concat \"\\n\"\n else ; _erbout.concat \"\\n\"\n > \"more th > an two\" ; _erbout.concat \"\\n\"\n end ; _erbout.concat > \"\\n\"\n_erbout", @saf > e_level=nil> The problem is the way ERB compiles the strings. It basically tries to do the following with your snippet: case number _erbout.concat "\n" when 1 _erbout.concat "\n" and so forth, which is not valid Ruby syntax. Try the following instead: <% case number when 1 %> one <% when 2 %> two <% else %> something else <% end %> - Jamis