On 9/13/06, Jacob Fugal <lukfugl / gmail.com> wrote:
> On 9/13/06, Jason Roelofs <jameskilton / gmail.com> wrote:
> > <% puts "Can't see me" %> --> nothing
> >
> > <%= puts "Can't see me" %> --> Can't see me
>
> That's wrong. When rendering an ERB template, those two constructs
> would be essentially equivalent. The both do the same thing: print
> "Can't see me" to STDOUT and add nothing to the rendered output.
>
> Using puts inside ERB does not put things into the rendered output --
> it's not equivalent to PHP's echo/print. You should never need to use
> puts or print within ERB (unless your intent is to print diagnostics
> out to STDOUT while the ERB is being rendered).
>
> <% %> and <%= %> both evaluate an expression. The difference is that
> <%= %> includes the result of the expression (cast to a string using
> to_s) in the rendered output. The result of the expression:
>
>    puts "Can't see me"
>
> is nil, since puts always returns nil. nil.to_s is an empty string, so
> even with the <%= %> form, nothing is added to the rendered output.
>
> What you want to do instead is just leave off the puts:
>
>    Nothing added: <% "Can't see me" %>
>    But printed here: <%= "Can see me" %>
>
> Jacob Fugal
>
>

One thing I've often wondered is how do you output from w/i a "non
output" block...ie in java scriptlets these are equivalent:

<% out.println("hi") %>
<%= "hi" %>

With ERB I've had some (admittedly rare) cases where this would be
useful.  Is it possible?

- rob
-- 
http://www.robsanheim.com
http://www.seekingalpha.com
http://www.ajaxian.com